什么是URL编码,URL解码

1. 例如我们要编写一个下载程序,下载的路径是  http://www.dbank.com/documents/图片/华仔.jpg ,如果直接用new URL(path)的方式,是无法取得网络连接的,

因为在程序中无法直接请求一个含有中文的url,所以,我们要对它编码,我们一般会编成gbk,utf-8,但是URL编码和gbk,utf-8编码的区别是,它不会把所有字符都编码,

它只对非字母数字的字符借助utf-8或gbk来编码。

编码时注意 不能把整个url路径传到UrlEncoder的decode方法中,因为它也会把反斜杠/和冒号:也编码,所以域名部分是不需要编码的,取出路径部分 /图片/华仔.jpg

然后用split方法分割再分别编码,算法如下

 

[java]  view plain copy print ?
  1. public static String formatUrl(String url) throws UnsupportedEncodingException{  
  2.     String[] dir = url.split("/");  
  3.     StringBuffer tempPath = new StringBuffer("");  
  4.     for(int i = 0; i < dir.length; i++){  
  5.         tempPath.append(URLEncoder.encode(dir[i], "UTF-8"));  
  6.         tempPath.append("/");  
  7.     }  
  8.     return tempPath.toString().substring(0, tempPath.length() - 1);  
  9. }  


最后获取的就是

例如 "http://www.dbank.com/documents/%E5%8D%8E%E4%BB%94.jpg" 。这下可以new了

 

格式是百分号加16进制码的方式,这便构成了url格式的编码。

但是我们可以直接在浏览器中请求一个含有中文的url路径,这是为什么呢?我想这是因为,浏览器的内部程序作了判断,不管什么URL,它都给来了个URL编码,所以含有中文的就可以请求了

总结:如果想让URL 成功new出来,url地址必须要符合2个条件:

①不能包含中文

②符合ur地址的格式,即 http://xx.com/a/b

URL解码

经过测试 解码和编码的唯一不同是 解码时只对16进制数(中文编码)解码,而反斜杠/,英文,数字是不会有所改变的,所以解码时不需要以斜杠/ 为界限,plit()分割来解码

而是直接传入路径

[java]  view plain copy print ?
  1. decode = URLDecoder.decode("http://www.dbank.com/documents/%E5%8D%8E%E4%BB%94.jpg","UTF-8");  

//打印结果  http://www.dbank.com/documents/图片/华仔.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值