今天發現兩個關於java URL編碼解碼的誤區:
1:URLEncoder 進行編碼兩次 值是一樣的 ?
String aa="測試";
String test=URLEncoder.encode(aa,"UTF-8");
System.out.println(test);
System.out.println(URLEncoder.encode(test,"UTF-8"));
output:
%E6%B5%8B%E8%AF%95
%25E6%25B5%258B%25E8%25AF%2595
原來URLEncoder 進行編碼時使用%作爲轉義標記,除了字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" ,空格轉換爲加號 (+) 外,都轉換成"%xy"的形式,xy是兩位16進制的數值;
無論什麼編碼 百分號還是會編碼爲%25 這樣的話無論編碼多少次結果都會不一樣。
2:URLDecoder 解碼漢字會與原文不同?
如上述所示:URLDecoder 解碼會找+ 號和%xy 進行解碼,其他值都會不變。所以下面程序是
String aa="測試+測試%25";
String test2=URLDecoder.decode(aa,"UTF-8");
System.out.println(test2);
output:
測試 測試%