今天发现两个关于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:
测试 测试%