《標記》-編碼一次,解碼兩次?

一、場景:

1、我在客戶端要通過get方式調用服務器端的url,將中文參數做utf-8編碼,需要在js中兩次的進行編碼,服務器端才能用decode方法一次獲取。

例如:
客戶端
var a=encodeURIComponent(encodeURIComponent(xing));  
服務器端只需要一次decode xing=URLDecoder.decode(xing, "UTF-8");

2、如果我在客戶端用java輸出漢字作爲參數,並且用http協議,也是需要兩次才能在服務器端正常的一次decode
例如:
客戶端
a=URLEncoder.encode(xing,"UTF-8");  
a=URLEncoder.encode(xing,"UTF-8");  

服務器端只需要一次decode 

a=URLDecoder.decode(xing, "UTF-8");


二、原理:
因爲在jsp中對中文進行了編碼的時候用的是UTF-8的編碼方式,而在servlet中調用request.getParameter()的時候使用服務器指定的編碼格式自動解碼一次。
所以前臺編碼一次,後臺實際解碼兩次,造成了亂碼。

第一次編碼後將漢字編碼爲%和字母數字的格式,而第二次編碼的時候是對%字母數字進行編碼,
雖然解碼的時候使用的是ISO-8859-1,但是對於%和字母數字而言用ISO-8859-1和UTF-8解碼出來的是一樣的,
此時就回到了漢字被編碼過一次的字符串了,當再次進行解碼的時候使用UTF-8就回將它轉會漢字。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章