亂碼 1/2 更新記錄

  • 2013/8/19
Servlet 中文處理(Tomcat)

Tomcat 7不知道哪個版本開始,server.xml 中設定 <Connector URIEncoding="utf-8"...>

以前版本的設定是  <Connector URIEncoding="iso-8859-1"...>,因此過去處理 GET 的中文亂碼時,可以new String(param.getBytes("ISO-8859-1"), "your encoding") 來解決,不過如果 server.xml 中設定<Connector URIEncoding="utf-8"...> 就不適用了,例如你是 Big5 的 URI 編碼過來的話,用 utf-8 來解釋,可能會沒有對應編碼,也就是顯示時會是「?」,這樣通常就沒救了 …

如果你以前就是用 new String(param.getBytes("ISO-8859-1"), "your encoding") 來處理 GET 時的亂碼,那就將 <Connector URIEncoding="utf-8"...>… 改回 <Connector URIEncoding="iso-8859-1"...> 就可以了…


<Connector URIEncoding="utf-8"...> 的設定,對於系統是 UTF-8 的倒是方便!
  • 2013/8/11

Unicode 與 UTF

原…  實際上採用 UCS-2/UTF-16 儲存,一開頭的兩個位元組(ff fe)是用來識別檔案採用的位元組順序,稱為BOM(byte order mark),之後使用兩個位元組來儲存每個Unicode字元。

改 為… 實際上採用 UCS-2/UTF-16 儲存(UTF-16是UCS-2的後續者,兩者差異對語言會有影響,實例之一可參考 Effective JavaScript 一書條款七),一開頭的兩個位元組(ff fe)是用來識別檔案採用的位元組順序,稱為BOM(byte order mark),之後使用兩個位元組來儲存每個Unicode字元。

JavaScript 編碼基礎

原... 這是因為JavaScript在內部是使用Unicode處理字元,實作上採用UTF-8

改為... 這是因為JavaScript支援Unicode(內部實作上採用16位元編碼每個字串元素,大致上可視為UCS-2/UTF-16,這當中還有些歷史因素造成的細節,詳見 Effective JavaScript 一書條款七)

Ajax 請求與回應

原... JavaScript在內部是使用Unicode處理字元,實作上採用UTF-8,所以傳入encodeURIComponent()的字串都是以UTF-8進行編碼,若將encodeURIComponent()透過非同步物件發送出去

改 為... JavaScript支援Unicode,內部實作上採用16位元編碼每個字串元素,大致上可視為UCS-2/UTF-16(這當中還有些歷史因素造成的 細節,詳見 Effective JavaScript 一書條款七),不過,傳入encodeURIComponent()的字串最後會以UTF-8進行編碼

  • 2012/12/18
新增 Python 的編碼
  • 2011/12/21
新增 Rails 的編碼,連結至 Rails 學習筆記
  • 2011/10/31
新增 Ruby 的編碼連結至 Ruby 學習筆記