在博客园安卓客户端时,遇到过中文资源找不到的问题
背景:在使用PICASSO的时候,遇到过中文路径加载失败。比如
https://images0.cnblogs.com/news_topic/携程.jpg
picasso就加载失败
我们需要用一个方法把中文字符转换为base64格式,试过安卓原生的方法,效果不理想
我们期望的结果是这样的
https://images0.cnblogs.com/news_topic/%E6%90%BA%E7%A8%8B.jpg
简单讲,就是只转换中文,为了性能,如果路径不包含中文字符串,则提前返回
因此有了下面的函数,使用时直接把url都用该方法装饰一遍,中文路径问题就轻松愉快的解决了。
private static final String HEX_STRING = "0123456789ABCDEF"; /**
* 把中文字符转换为带百分号的浏览器编码
*
* @param word
* @return
*/
public static String toBrowserCode(String word) {
byte[] bytes = word.getBytes(); //不包含中文,不做处理
if (bytes.length == word.length())
return word; StringBuilder browserUrl = new StringBuilder();
String tempStr = ""; for (int i = ; i < word.length(); i++) {
char currentChar = word.charAt(i); //不需要处理
if ((int) currentChar <= ) { if (tempStr.length() > ) {
byte[] cBytes = tempStr.getBytes(); for (int j = ; j < cBytes.length; j++) {
browserUrl.append('%');
browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0xf0) >> ));
browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0x0f) >> ));
}
tempStr = "";
} browserUrl.append(currentChar);
} else {
//把要处理的字符,添加到队列中
tempStr += currentChar;
}
}
return browserUrl.toString();
}