【android】 中文URL资源找不到的问题
2015-06-05 15:27
465 查看
在博客园安卓客户端时,遇到过中文资源找不到的问题
背景:在使用PICASSO的时候,遇到过中文路径加载失败。比如
http://images.cnitblog.com/news_topic/携程.jpg
picasso就加载失败
我们需要用一个方法把中文字符转换为base64格式,试过安卓原生的方法,效果不理想
我们期望的结果是这样的
http://images.cnitblog.com/news_topic/%E6%90%BA%E7%A8%8B.jpg
简单讲,就是只转换中文,为了性能,如果路径不包含中文字符串,则提前返回
因此有了下面的函数,使用时直接把url都用该方法装饰一遍,中文路径问题就轻松愉快的解决了。
背景:在使用PICASSO的时候,遇到过中文路径加载失败。比如
http://images.cnitblog.com/news_topic/携程.jpg
picasso就加载失败
我们需要用一个方法把中文字符转换为base64格式,试过安卓原生的方法,效果不理想
我们期望的结果是这样的
http://images.cnitblog.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 = 0; i < word.length(); i++) { char currentChar = word.charAt(i); //不需要处理 if ((int) currentChar <= 256) { if (tempStr.length() > 0) { byte[] cBytes = tempStr.getBytes(); for (int j = 0; j < cBytes.length; j++) { browserUrl.append('%'); browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0xf0) >> 4)); browserUrl.append(HEX_STRING.charAt((cBytes[j] & 0x0f) >> 0)); } tempStr = ""; } browserUrl.append(currentChar); } else { //把要处理的字符,添加到队列中 tempStr += currentChar; } } return browserUrl.toString(); }
相关文章推荐
- android 第三方库使用笔记
- Android实战简易教程-第十枪(画廊组件Gallery实用研究)
- Android 的布局文件的介绍和每个属性的详解
- Android中通过注解代替findViewById方法
- Android—点击自定义dialog窗体的控件销毁自己
- Android intent属性之Action
- Android 点击两次退后按钮程序退出
- Android intent属性之component
- Android, Ubuntu连接真机测试出现感叹号
- Android读程序包的资源
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android ActionBar使用方法
- Android:简易弹幕效果实现
- android布局属性
- android 小技巧,不断更新中
- Android4.4----Vold挂载管理分析USB挂载(四)
- android设置背景色为透明
- android paint 研究总结
- 中国气象网 气象数据开放平台 API使用方法 (Android)
- android 无法生成R文件的原因剖析