一: 我們先看2個編碼的情況
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
測試
二; 我們來看編碼一次,提交給服務器的結果
我們吧“測試”編碼一次的字符串%E6%B5%8B%E8%AF%95 ,提交,服務器端用request.getParameter("name")的到參數,然后我們解碼
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
我們發現得到的結果 ???è? 顯示亂碼。
因為在request.getParameter("name")之前會自動做一次解碼的工作,而且是默認的ISO-8859-1,相當於調用了一次java.net.URLDecoder.decode(name, "ISO-8859-1")
所以我們再用URLDecoder.decode(name, "UTF-8")就是亂碼了。
三: 我們在看編碼2次,提交給服務器的結果
編碼2次的字符串是%25E6%25B5%258B%25E8%25AF%2595 ,服務器端用request.getParameter("name")的到參數,自動按ISO-8859-1解碼得到的串是%E6%B5%8B%E8%AF%95 ,也就是編碼一次得到的字符串。
然后,我們在System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));解碼輸出,得到的結果就是 “測試” 2個漢字。