關于超連結傳中文值亂碼的問題
1.對于某些固定的值得。最好直接傳遞utf-8編碼後的值,這樣效率更高。
例如 <a id="" href="/searchAction.act?province=%E5%8C%97%E4%BA%AC" target="_blank" rel="external nofollow" >北京</a>
2.對于值不固定,我們要傳遞某個變量過去,那麼需要編碼兩次 ,解碼一次,原因如下
(摘自http://blog.163.com/baijie_1123/blog/static/133104049201112611858184/)
因為在jsp中對中文進行了編碼的時候用的是UTF-8的編碼方式,而在servlet中調用request.getParameter();方法的時候使用伺服器指定的編碼格式自動解碼一次,是以前台編碼一次背景解碼一次而解碼和編碼的方式不同是以造成了亂碼的出現
使用兩次編碼的過程相當于如下代碼:
String name=java.net.URLEncoder.encode("測試", "UTF-8");
System.out.println(name);
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
name=java.net.URLDecoder.decode(name, "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
輸出為:
%E6%B5%8B%E8%AF%95
%25E6%25B5%258B%25E8%25AF%2595
%E6%B5%8B%E8%AF%95
測試
第一次編碼後将漢字編碼為%和字母數字的格式,而第二次編碼的時候是對%字母數字進行編碼,雖然解碼的時候使用的是ISO-8859-1(擷取資料時request.getParamter("")會自動解碼一次),但是對于%和字母數字而言用ISO-8859-1和UTF-8解碼出來的是一樣的,此時就回到了漢字被編碼過一次的字元串了,當再次進行解碼的時候使用UTF-8就回将它轉會漢字;