GET請(qǐng)求中中文亂碼的解決

GET請(qǐng)求中的亂碼原理解析和解決方案

《深入分析javaweb技術(shù)內(nèi)幕》第三章

web應(yīng)用中瀏覽器與服務(wù)端的編碼和解碼


瀏覽器會(huì)自動(dòng)對(duì)url進(jìn)行編碼,不同瀏覽器用的編碼集不同,可進(jìn)行設(shè)置。

tomcat默認(rèn)是用iso-8859-1對(duì)uri和get參數(shù)進(jìn)行解碼,所以如果這個(gè)過(guò)來(lái)的get參數(shù)是用的utf-8編碼的,到了服務(wù)器端tomcat用iso8859-1解碼就會(huì)出現(xiàn)亂碼。

好像tomcat8默認(rèn)用的是utf8,get請(qǐng)求中文不會(huì)亂碼。

修改tomcat配置的解決方法:
修改配置文件server.xml <conntect URIEncoding="UTF-8"/>,用utf-8對(duì)uri解碼。
tomcat對(duì)get參數(shù)解碼用的編碼集,要么是Header的ContentType定義的charset,要么是默認(rèn)的ISO-8859-1。
設(shè)置useBodyEncodingForURI=true使tomcat使用ContentType的charset。這個(gè)屬性是表示對(duì)get參數(shù)使用BodyEncoding進(jìn)行解碼而不是對(duì)整個(gè)uri。

不改tomcat配置:

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

  2. 可以前端兩次編碼uri,到服務(wù)端兩次解碼uri,tomcat一次(ISO-8859-1),手動(dòng)一次(utf-8)。
    因?yàn)閷?duì)英文字符來(lái)說(shuō)UTF-8編碼和ISO-8859-1編碼的效果相同。
    但是如果有特殊字符,就沒(méi)法得到正確的結(jié)果。

ajax發(fā)請(qǐng)求時(shí)如果用encodeURI()用utf-8編碼,瀏覽器會(huì)不會(huì)干涉再編碼一次?


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容