在Java中,我们会经常对一些中文字符进行URL编码,这样的就可以在数据传递中解决中文乱码的现象。
但是在对于一些特殊字符的URLEncoder编码后 在通过URLDecoder解码处理会出现丢失,乱码的现象。
造成这样现象的原因主要是:URL编码没有对其进行转码。
其解决的办法是:十六进制值
以下8个特殊字符URL编码没有对其进行转码 | 十六进制值 | ||
1. | + | URL 中+号表示空格 | %2B |
2. | 空格 | URL中的空格可以用+号或者编码 | %20 |
3. | / | 分隔目录和子目录 | %2F |
4. | ? | 分隔实际的 URL 和参数 | %3F |
5. | % | 指定特殊字符 | %25 |
6. | # | 表示书签 | %23 |
7. | & | URL 中指定的参数间的分隔符 | %26 |
8. | = | URL 中指定参数的值 | %3D |
把特殊字符进行十六进制转换,然后进行URLEncoder编码,最后URLDecoder解码出来就没有问题了。
url后参数的转码与解码
import java.net.URLDecoder;
import java.net.URLEncoder;
String strTest = "?=abc?中%1&2<3,4>";
strTest = URLEncoder.encode(strTest, "UTF-8");
System.out.println(strTest);
strTest = URLDecoder.decode(strTest,"UTF-8");
System.out.println(strTest);
执行结果:
%3F%3Dabc%3F%E4%B8%AD%251%262%3C3%2C4%3E
?=abc?中%1&2<3,4>