1. 程式人生 > >GET請求中中文亂碼的解決

GET請求中中文亂碼的解決

《深入分析javaweb技術內幕》第三章

瀏覽器會自動對url進行編碼,不同瀏覽器用的編碼集不同,可進行設定。

tomcat預設是用iso-8859-1對uri和get引數進行解碼,所以如果這個過來的get引數是用的utf-8編碼的,到了伺服器端tomcat用iso8859-1解碼就會出現亂碼。

修改tomcat配置的解決方法:
修改配置檔案server.xml <conntect URIEncoding="UTF-8"/>,用utf-8對uri解碼。
tomcat對get引數解碼用的編碼集,要麼是Header的ContentType定義的charset,要麼是預設的ISO-8859-1。
設定useBodyEncodingForURI=true

使tomcat使用ContentType的charset。這個屬性是表示對get引數使用BodyEncoding進行解碼而不是對整個uri。

不改tomcat配置:

  1. 在java中用iso8859-1解碼後用utf-8編碼
    key = new String(key.getBytes("iso8859-1"), "utf-8");

  2. 可以前端兩次編碼uri,到服務端兩次解碼uri,tomcat一次(ISO-8859-1),手動一次(utf-8)。
    因為對英文字元來說UTF-8編碼和ISO-8859-1編碼的效果相同。
    但是如果有特殊字元,就沒法得到正確的結果。

ajax發請求時如果用encodeURI()用utf-8編碼,瀏覽器會不會干涉再編碼一次?

另外,
在java端處理url編解碼有兩個類,URLEncoder和URLDecoder。這兩個類可以將所有“%”加utf-8碼值用utf-8解碼,從而得到原始的字元。