GET請求中中文亂碼的解決
阿新 • • 發佈:2019-01-02
《深入分析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配置:
在java中用iso8859-1解碼後用utf-8編碼
key = new String(key.getBytes("iso8859-1"), "utf-8");可以前端兩次編碼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解碼,從而得到原始的字元。