URLEncoder和URLDecoder

来源:互联网 发布:linux下禁止ping 编辑:程序博客网 时间:2024/06/05 03:28

URLEncoder和URLDecoder

 例子1::
最近编程序到一个问题,就是要把汉字转换成UTF-8编码。一想到编码,我的头就大了,各种各样的码,转来转去的,为什么就不能统一下呢?闲话少说,其实这种问题看似复杂,但只要找到了合适的类,其它事情小菜一碟了。那么合适的类到底是什么呢?就是URLEncoder和URLDecoder。这两个类使用十分方便,因为它们各自只有一个方法,而且都是静态方法(详细信息参见jdk文档)。下面是我稍加封装后的新类。
Java代码收藏代码
  1. importjava.io.UnsupportedEncodingException;
  2. importjava.net.URLDecoder;
  3. importjava.net.URLEncoder;
  4. publicclassChineseToUTF8{
  5. publicstaticStringEncode(Stringchinese)throwsUnsupportedEncodingException
  6. {
  7. StringnewStr=URLEncoder.encode(chinese,"utf8");
  8. returnnewStr;
  9. }
  10. publicstaticStringDecode(Stringutf8)throwsUnsupportedEncodingException:
  11. System.out.println(Encode("分辨率"));
  12. System.out.println(Decode(Encode("分辨率")));
  13. }
  14. }

运行结果:

Java代码收藏代码
  1. %E5%88%86%E8%BE%A8%E7%8E%87
  2. 分辨率

从运行结果可以看出,UTF-8把每一个汉字转换成了3个十六进制数,中间用%分开。



例子2:

  1.     public static void main(String[] args) throws UnsupportedEncodingException {  
  2.         String url = "http://www.baidu.com?a=b&b=c&abc=你好";  
  3.         String en  = URLEncoder.encode(url, "UTF-8");  
  4.         System.out.println(en);  
  5.         String decode = URLDecoder.decode(en, "UTF-8");  
  6.         System.out.println(decode);  
  7.         String decode2 = URLDecoder.decode(decode, "UTF-8");  
  8.         System.out.println(decode2);  //2次decode不会再变化  
  9.           
  10.         String es = HtmlUtils.htmlEscapeDecimal(url);  
  11.         System.out.println(es);  //没有html的特殊符号,不会有变化  
  12.           
  13.         String esen = HtmlUtils.htmlEscapeDecimal(en);  
  14.         System.out.println(esen);  
  15.           
  16. //      http%3A%2F%2Fwww.baidu.com%3Fa%3Db%26b%3Dc%26abc%3D%E4%BD%A0%E5%A5%BD  
  17. //      http://www.baidu.com?a=b&b=c&abc=你好  
  18. //      http://www.baidu.com?a=b&b=c&abc=你好  
  19. //      http://www.baidu.com?a=b&b=c&abc=你好  
  20. //      http%3A%2F%2Fwww.baidu.com%3Fa%3Db%26b%3Dc%26abc%3D%E4%BD%A0%E5%A5%BD  
  21.   
  22.     }  
 

 

结论:

1 URLEncoder 会把中文编码为 %ab% 这样的格式,防止中文乱码

2 URLDecoder 解码恢复原样后,继续解码,字符串并不会有别的改变

3 HtmlUtils 用于有html特殊的字符转换成转义字符,如 & 转成 &nbsp 等,   如不转换这浏览器解析会出现错误

注意 当对 http:// 进行encode后,浏览器将把它识别为相对路径,而非绝对路径


  1.     public static void main(String[] args) throws UnsupportedEncodingException {  
  2.         String url = "http://www.baidu.com?a=b&b=c&abc=你好";  
  3.         String en  = URLEncoder.encode(url, "UTF-8");  
  4.         System.out.println(en);  
  5.         String decode = URLDecoder.decode(en, "UTF-8");  
  6.         System.out.println(decode);  
  7.         String decode2 = URLDecoder.decode(decode, "UTF-8");  
  8.         System.out.println(decode2);  //2次decode不会再变化  
  9.           
  10.         String es = HtmlUtils.htmlEscapeDecimal(url);  
  11.         System.out.println(es);  //没有html的特殊符号,不会有变化  
  12.           
  13.         String esen = HtmlUtils.htmlEscapeDecimal(en);  
  14.         System.out.println(esen);  
  15.           
  16. //      http%3A%2F%2Fwww.baidu.com%3Fa%3Db%26b%3Dc%26abc%3D%E4%BD%A0%E5%A5%BD  
  17. //      http://www.baidu.com?a=b&b=c&abc=你好  
  18. //      http://www.baidu.com?a=b&b=c&abc=你好  
  19. //      http://www.baidu.com?a=b&b=c&abc=你好  
  20. //      http%3A%2F%2Fwww.baidu.com%3Fa%3Db%26b%3Dc%26abc%3D%E4%BD%A0%E5%A5%BD  
  21.   
  22.     }  
 

 

 

结论:

1 URLEncoder 会把中文编码为 %ab% 这样的格式,防止中文乱码

2 URLDecoder 解码恢复原样后,继续解码,字符串并不会有别的改变

 

3 HtmlUtils 用于有html特殊的字符转换成转义字符,如 & 转成 &nbsp 等,   如不转换这浏览器解析会出现错误

 

 

 

注意 当对 http:// 进行encode后,浏览器将把它识别为相对路径,而非绝对路径

0 0