URLDecoder和URLEncoder

来源:互联网 发布:独立域名与二级域名 编辑:程序博客网 时间:2024/06/03 20:15

URLDecoder和URLEncoder用于完成普通字符串和application/x-www-form-urlencoded MIME 字符串之间的相互转换。可能有读者觉得后一个字符串非常专业,以为又是什么特别高深的知识,其实不是。

  在介绍application/x-www-form-urlencoded MIME 字符串之前,先使用www.google.com搜索关键字"李刚 j2ee",将看到如图17.3所示的界面:

图17.3 搜索关键字包含中文

  从图17.3中可以看出:当我们搜索的关键字包含中文时,这些关键字就会变成如图17.3所示的"乱码"--实际上这不是乱码,这就是所谓的application/x-www-form-urlencoded MIME字符串。

  当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧字符串转换成如图17.3所示的特殊字符串。那么编程过程中可能涉及将普通字符串和这种特殊字符串的相关转换,这就需要使用URLDecoder和URLEncoder类,其中:

  URLDecoder类包含一个decode(String s,String enc)静态方法,它可以将看上去是乱码的特殊字符串转转成普通字符串。

  URLEncoder类包含一个encode(String s,String enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。

  下面程序示范了如何将图17.3所示地址栏中"乱码"转换成普通字符串,并示范了如何将普通字符串转换成application/x-www-form-urlencoded MIME字符串。


import java.net.URLDecoder;
import java.net.URLEncoder;


public class URLDecoderTest {
  public static void main(String[] args) throws Exception {
  //将application/x-www-form-urlencoded字符串
  //转换成普通字符串
 // 将“%E6%9D%8E%E5%88%9Aj2ee” 转换成以utf-8编码的普通字符
  // 前提是“%E6%9D%8E%E5%88%9Aj2ee”这个特殊字符串是浏览器以utf-8 编码 进行URLEncoder.encode("李刚j2ee", "utf-8")生成的,
 // 再转换时通过utf-8 时就不会中文乱码了
 // 而包含中文字符的普通字符串则需要转换,转换的方法是每个中文字符占2个字节,每个字节可以转换成2个十六进制的数字,所以每个中文           // 字符将转换成"%XX%XX"的形式
 // 这是utf-8 编码的转换方式
 
 String str=URLDecoder.decode("%E6%9D%8E%E5%88%9Aj2ee", "utf-8");
 System.out.println(str);
   //将普通字符串
  //转换成application/x-www-form-urlencoded字符串
 // 将"李刚j2ee"转换成以utf-8编码的特殊字符串
 str=URLEncoder.encode("李刚j2ee", "utf-8");
 System.out.println(str);
}
}


上面程序中粗体字代码用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的转换。运行上面程序将看到如下输出:

  李刚 j2ee

  %E6%9D%8E%E5%88%9Aj2ee

  仅包含西欧字符的普通字符串和application/x-www-form-urlencoded MIME字符串无须转换,而包含中文字符的普通字符串则需要转换,转换的方法是每个中文字符占2个字节,每个字节可以转换成2个十六进制的数字,所以每个中文字符将转换成"%XX%XX"的形式。当然,采用不同的字符集时,每个中文字符对应的字节数并不完全相同,所以使用URLEncoder和URLDecoder进行转换时也需要指定字符集。


0 0