博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
URLEncode编码和URLDecode解码
阅读量:5951 次
发布时间:2019-06-19

本文共 2004 字,大约阅读时间需要 6 分钟。

1 String  text1 = java.net.URLEncoder.encode("中国" ,"utf-8" );  2 String  text2 = java.net.URLDecoder.decode(text1,"utf-8");

 

(1).URLEncoder
需要注意:这个方法编码了符号,“\” ,“&”,“=”,和“:”,并把空格(“ ”)转换成了(+)。它不会尝试着去规定在一个URL中这些字符怎样被使用。由此,你不得不分块编码你的URL,而不是把整个URL一次传给这个方法。

  例如,假设你想编码这个string:

  pg=q&kl=XX&stype=stext&q=+"Java+I/O"&search.x=38&search.y=3

  这段代码对其进行编码:  

1 String query = java.net.URLEncoder.encode( "pg=q&kl=XX&stype=stext&q=+"Java+I/O"&search.x=38&search.y=3");2 3 System.out.println(query);

  不幸的是,得到的输出是:

  pg%3Dq%26kl%3DXX%26stype%3Dstext%26q%3D%2B%22Java%2BI%2FO%22%26search.x%3D38%26search.y%3D3

  出现这个问题就是方法URLEncoder.encode( ) 在进行盲目地编码。它不能区分在URL或者查询string中被用到的特殊字符(像前面string中的“=”,和“&”)和确实需要被编码的字符。所以URL需要一次只编码一块。

 

  例如正确的拼接方法:
  
1 private static String _MakeURL(String p_url, Map
params) throws UnsupportedEncodingException { 2 StringBuilder url = new StringBuilder(p_url); 3 // Strng.indexOf(substring) //搜索String中的substring,默认从0位开始; 4 5 if(url.indexOf( "?")<0) 6 url.append( '?'); 7 8 for(String name : params.keySet()){ 9 url.append( '&');10 url.append(name);11 url.append( '=');12 //url.append(String.valueOf(params.get(name)));13 //做URLEncoder处理14 url.append(URLEncoder. encode(String.valueOf (params.get(name)), "UTF-8"));15 }16 17 return url.toString().replace( "?&", "?");18 }
 
(2).URLDecoder
  注意:由于这个方法没有触及到非转义字符,所以你可以把整个URL作为参数传给该方法<如下面的qerry>。不用像之前那样分块进行,依然可以得到你想要的正确的解码结果。例如:
  
1   String input = "http://www.altavista.com/cgi-bin/"+"qerry?pg=q&kl=XX&stype=stext&q=%2B%22Java+I%2FO%22&search.x=38&search.y=3";    2     try {    3          String output = java.net.URLDecoder.decode(input, "UTF-8");    4          System.out.println(output);   5      }
 
综上所述:UrlEncoder一次只能编码一块,然后拼接起来,成为一个url ; 而UrlDecoder可以一次性解码整个链接。

转载于:https://www.cnblogs.com/wufeng0927/p/5335367.html

你可能感兴趣的文章
PhoneGap极光推送 cordova消息推送
查看>>
Subarray Sum Equals K
查看>>
preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
查看>>
算法题解:找出包含给定字符的最小窗口(枚举的一般方法)
查看>>
超级账本HyperLedger初体验
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
切图崽的自我修养-[ES6] 编程风格规范
查看>>
[React Native Android 安利系列]样式与布局的书写
查看>>
利用dxflib读写cad文件
查看>>