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

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

有時候,你的系統中沒有設置全部的地方爲相同的字符集的時候(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 個緣由:ide

數據庫和 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 本身的字符集,例如歐元就不能正確存儲了。.net

請肯定你按照你係統的建議爲你的全部的實體都設置 UTF-8 編碼,請參考 Troubleshooting Character Encodings 頁面中內容。htm

 

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

相關文章
相關標籤/搜索