中文參數(shù)亂碼問題
中文參數(shù)總是會(huì)引起一些亂碼問題,煩不勝煩。js默認(rèn)的UTF-8編碼,java項(xiàng)目使用的是gbk編碼,使用ajax請(qǐng)求獲取到數(shù)據(jù)然后作為參數(shù)請(qǐng)求下一個(gè)頁(yè)面時(shí)就會(huì)發(fā)生亂碼
其實(shí)java項(xiàng)目所使用的應(yīng)用服務(wù)器(tomcat、resin等)本身就會(huì)根據(jù)項(xiàng)目編碼格式默認(rèn)的對(duì)參數(shù)進(jìn)行一次加密和解密。
后來(lái)摸索了一下有兩個(gè)解決方案:
1)、對(duì)請(qǐng)求的參數(shù)值進(jìn)行兩次URLEncode()
原理:第一次進(jìn)行encode后會(huì)將字符串轉(zhuǎn)換為ascii字符編碼,這個(gè)時(shí)候漢字就不是多字節(jié)字符編碼了,這個(gè)時(shí)候再對(duì)其進(jìn)行第二次編碼,因此,當(dāng)?shù)谝?次解析時(shí)不管使用何種解析方式得到的都是第一次編碼所得到的asscii字符編碼,然后再使用js默認(rèn)的UTF-8格式解碼就可以得到正確的字符了。
2)、設(shè)置請(qǐng)求的編碼格式,request.setCharaterEncoding("XXX")
原理:這樣服務(wù)器在自動(dòng)解碼時(shí)就會(huì)按照請(qǐng)求中設(shè)置的編碼格式進(jìn)行解碼,只要設(shè)置解碼的格式與編碼時(shí)一致即可得到正確編碼的值。
2012/10/16
最近又遇到一個(gè)亂碼問題,匯總到這里
jsp頁(yè)面,java全部使用的UTF-8編碼,后臺(tái)使用了一個(gè)列表工具插件,該插件實(shí)現(xiàn)了通過數(shù)據(jù)庫(kù)配置一些參數(shù)自動(dòng)生成列表功能。由于頁(yè)面使用form表單以get方式提交,表單總的中文默認(rèn)按照頁(yè)面編碼格式進(jìn)行編碼,而該插件接收參數(shù)時(shí)解碼方式使用的是gbk編碼(在resin下是gbk而在jetty下又是utf-8了),至于具體什么原因沒搞清楚,這時(shí)解碼方式與頁(yè)面編碼方式不一致了,因此在form表單中加入accept-charset="gbk"屬性即可指定請(qǐng)求編碼時(shí)使用gbk編碼。

浙公網(wǎng)安備 33010602011771號(hào)