1. URL地址中出现的乱码:
1) 当URL地址中使用中文等非西欧字符时会出现诸如%B7%C5...之类的乱码;
2) 其实这不是乱码,只是一种编码而已,国际规定URL地址中的字符统一使用一种MIME码,即“application/x-www-form-urlencoded”,该编码规定所有西欧字母(包括英文字母等)可以直接使用,但是中文等非西欧语言的字符需要进行编码;
3) 但是有些浏览器的地址栏中就可以正常显示中文,那是因为这些浏览器实现了智能化地址栏的功能呢,自动将“乱码“”显示“为中文,但这仅仅是一种显示,如果你将该地址复制粘贴到记事本或者其他文本编辑器上就会发现仍然是”乱码“;
2. Java的URL编解码工具:
1) Java分别使用URLDecoder和URLEncoder的静态方法对URL进行编解码;
2) 解码:static String decode(String s, String enc); // 将“乱码”s转换成人看得懂的字符,enc是目标编码
3) 编码:static String encode(String s, String enc); // 将人能看懂的字符转换成"乱码",enc是使用的编码
4) enc值得是人能看得懂的字符的编码,这是一定要指定的,比如中文,中文在计算机底层也是用编码表示的,Java提供的工具也是在两种编码之间进行转换,即中文编码和“乱码”之间进行转换,但是中文也有多种编码方式,不同的中文编码方式对应的“乱码”有所不同,比如有些中文编码转换到“乱码”后一个中文字符对应两个字节,而有些会对应3个字节;
5) application/x-www-form-urlencoded的编码方式是"%+两个16进制数"等于一个字节,比如一个中文字符如果可以编码成2字节的“乱码”,则得到的结果就如同这样的形式,"%B6%C3";
6) 示例:
public class Test { private static final String human = "你好"; private static final String net = "%E4%BD%A0%E5%A5%BD"; public static void main(String[] args) throws IOException { System.out.println(URLEncoder.encode(human, "utf-8")); System.out.println(URLDecoder.decode(net, "utf-8")); } }