Android编码问题之URLEncoder.encode(str)和Uri.encode(str)的区别

开发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应该是这样子的:://?

  • 不参与编码的字符

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不能随意自己重写,否则会和很多第三方库默认编码不符合,那坑就更多了。

你可能感兴趣的:(Android编码问题之URLEncoder.encode(str)和Uri.encode(str)的区别)