做过Java的都知道,Java中可以通过URLEncoder对url编码, 但是如果你拿到的uri是别人已经拼好的, 比如是服务端返回的uri, 这时候你会发现用URLEncoder已经解决不了你的问题了,因为它会把url中所有非ASCII编码的字符都进行编码, 结果不是我们想要的。
要解决此问题有很多种办法,比如通过正则替换, 递归遍历字符替换等。 我这里要说的是一个最简捷的实现。用到的类:android.net.Uri
方法:
Uri.encode(String s, String allow)
第一个参数是你要进行encode的字符串, 通常是一个uri
第二个参数是哪些非ASCII字符是例外, 不对其进行编码
实现如下:
public static String encodeURI(String uri) {
return Uri.encode(uri, ":/-![].,%?&=");
}
这样, 我们实现了只把需要编码的字符编码, 而避开uri中的这些特殊字符了