1. 程式人生 > >Confluence 6 € 歐元字符集不能正常顯示

Confluence 6 € 歐元字符集不能正常顯示

html lock rev character ups clas page prev tps

€ (euro) 標記 是一個 3 字節字符,在 (UTF-8)中這個字符被表示為 0xE2, 0x82, 0xAC。

有時候,你的系統中沒有設置所有的地方為相同的字符集的時候(Confluence,服務器和數據庫都應該是相同的字符集),你可能會遇到一些字符不能顯示的問題。

...
I write a page with a Euro sign in it (€). All is well, the Euro sign shows up in the wiki markup text-box, and the preview, and the display of the saved page.
One day later, the Euro sign has changed into a question mark upside down!


...
What is going on? Why does the Euro sign mysteriously change? How do I prevent it?

有趣的是,這個字符集在測試的時候是沒有問題的,Confluence 和數據庫都能夠沒有問題的完整識別這個字符。

導致這個問題的可能是有如下 2 個原因:

數據庫和 Confluence 使用的是 utf-8 編碼,但是連接不是。

當數據在應用程序和數據庫之間進行傳遞的時候,如果使用的不是 utf-8 編碼,有可能會導致字符不能被識別。你可以在你的連接中指定使用 utf-8 編碼,你這個問題將會自動被解決,請註意修改數據庫連接後,已經存在的數據不會被修改,你可能需要找到有亂碼的地方自行進行修改。

數據庫沒有使用 utf-8,但是 Confluence 和連接使用的是。

如果你的數據庫編碼沒有使用 UTF-8 編碼,例如你可能使用的是 latin1 編碼,那麽有可能在你存儲 "€" 字符的時候導出存儲錯誤。這個有可能是因為 緩存(caching) 導致的。 當 Confluence 將數據庫存儲到數據庫的時候,Confluence 有可能還保留了一個本地的緩存拷貝。如果數據庫的字符集沒有被正確的設置,歐元的標記可能不能在數據庫中正確存儲,但是 Confluence 有可能會持續使用緩存的數據(這個數據有正確的編碼)。這個錯誤只能在緩存被刪除後才能察覺到,因為不正確的字符編碼已經存儲到數據庫中了。

針對存儲使用 latin1 編碼的字符集,所有 2 字節的 UTF-8 編碼字符都應該能夠正確顯示,在存儲歐元標記的時候,數據庫中的存儲數據將會顯示為 '?' 。Confluence 的字符編碼被設置為 UTF-8 編碼,那麽 2 字節的 UTF-8 編碼,在數據庫中存儲的使用的 latin1 字符集,那麽數據庫也會使用的是 2 字節的字符集而不會使用 UTF-8 字符集。這樣 3 自己的字符集,例如歐元就不能正確存儲了。

請確定你按照你系統的建議為你的所有的實體都設置 UTF-8 編碼,請參考 Troubleshooting Character Encodings 頁面中內容。

https://www.cwiki.us/pages/viewpage.action?pageId=37487808


Confluence 6 € 歐元字符集不能正常顯示