URI encode与URL encode对空格的不同处理

        在各种开放平台、OpenAPI越来越多之时,客户端软件或多或少的在通过HTTP、HTTPS协议与服务器交互。这其中一个常见的情况就是要求对URL进行encode处理,以保证中文、特殊字符的正确传递。不过这个小小的encode也没想象中的那么单纯。

        前几日在Android开发中遇到一例时,URL中的空格符(ASCII码是0x20),在经过java.net.URLEncoder类encode以后,会变成+号,而不是%20,从而造成了server不能正确识别。

        经查,URLEncode有两个方法:

public static String encode (String s,String charsetName)
Encodes s using the Charset named bycharsetName.

 

public static String encode (String s)

Equivalent to encode(s, "UTF-8").

 

        第二个方法已经从Android API 1起就被弃用了,建议使用第一种方法显示的指定字符集为UTF-8,并且该编码是将空格符编码为+,而不是%20。当然,这是符合URL规范的,见RFC-1738

 

        要想将空格符编码为%20,就要用另一种encode,即android.net.Uri类,该类使用RFC-2396标准。语法如下:

public static String encode (String s)

Encodes characters in the given string as'%'-escaped octets using the UTF-8 scheme. Leaves letters ("A-Z","a-z"), numbers ("0-9"), and unreserved characters("_-!.~'()*") intact. Encodes all other characters.

 

        当进行网络相关的接口实现时,还是要认真了解具体的区别,同时也建议开放平台的文档中能尽量清晰的描述协议约定,以免给开发和调试带来困难。试想,如果不是恰巧发现了这个问题,得经过多少测试才能发现这个bug呢?

        至于URL与URI的区别,参见百度百科吧。

——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值