开发android应用五六年了,总觉得字符串编码是一个坑,就Android本身提供了两种编解码的方式:
URLEncoder.encode(String s, String charset) / URLDecoder.decode(String s);
vs
Uri.encode(String s) / Uri.decode(String s);
今天我们就从以下几点了解以下这两种编码的区别:
- 编码标准
URLEncode符合RFC 2396标准,主要是对网页内容和网站链接进行转码。Uri.encode同样遵循RFC 2396标准,一个标准的URI应该是这样子的:<scheme>://<authority><path>?<query>
- 不参与编码的字符
URLEncode不编码字符:”-.*”,”a-z”,”A-Z”,”0-9″,” ” 空格会被编码成“+”
Uri.encode不编码字符:”-!.~'()*”,”0-9″,”a-z”,”A-Z”
- 是否可以扩展被允许的字符集
URLEncode.encode不允许扩展,Uri.encode(String s, String allow)允许扩展字符集
- 使用场景
Uri.encode多用在组件之间传递数据时使用,URLEncode.encode多用在对api进行编码时使用
总结
android提供的这两种编码方式都有各自的用途,不能单纯的只使用其中一种,否则会带来很多你意想不到的问题,还有就是URLEncode不能随意自己重写,否则会和很多第三方库默认编码不符合,那坑就更多了。