星期三, 8月 02, 2006

亂碼問題...

突然想到, 已經很久很久沒有更新文章了, 趁著公司的專案剛告一段落, 來寫一下關於亂碼的問題:

由於我們公司的網頁都採用 Big5 編碼, 於是在遇到一些 Big5 沒有的字元, 就會出現亂碼問題, 說明如下:

若使用者輸入不包含在Big5內,但包含在 unicode內的字元, 其實瀏覽器會自動轉成 unicode 編碼, 如 “菓” unicode 為 \u83D3, 瀏覽器會自動轉成 菓
如此, 存到 DB 也會這樣存起來, 程式將資料帶出來到網頁, 瀏覽器會自動轉回對應字元, 所以不會有問題...

但若把這些資料, 放到其他地方, 如 PDF 報表, 則必須手動轉回該字元..

由於我們系統又使用 XSLT 來轉換 XML 成 HTML...這會把 & 字元跳脫成 & 所以 菓 就變成 菓 網頁就顯示 菓 而不是對應的字元了...於是又必須手動把 & 轉回 &, 讓網頁正常顯示... (為了打出上面這段文字...還真是麻煩...要跳脫好幾次 &)

最麻煩的是 MS950 的字元, 比 Big5 多出了 7 個外字字元 (碁恒裏粧嫺銹墻, 字碼範圍為 F9D6~F9DC), 當然 MS950 比 Big5 多很多其他字元, 但大多為符號字元, 中文部份只有 7 個字, 瀏覽器就不會自動轉換成 unicode 表示法. 存到 XML 裡面會變亂碼(由於xml也是採用Big5編碼), 於是, 在存進去之前, 需要再把這些字元手動轉成 unicode 表示法....

為了解決這些編碼問題, 因應不同情況, 要做不同的處理, 還真是麻煩. 所以未來最好系統都用 utf-8 來存資料, 網頁顯示也都用 utf-8 來顯示, 就都不會有這些問題了...