【android】 中文URL资源找不到的问题
在博客园安卓客户端时,遇到过中文资源找不到的问题
背景:在使用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();
}
【android】 中文URL资源找不到的问题的更多相关文章
- Android Webview H5资源本地化
Android Webview H5资源本地化 一. 创建读取资源项目独立模块 1. 项目依赖的好处 符合模块化的思想,他们相互独立.一个项目持有另一个项目的引用,修改更加方便. (注:compile ...
- 今天给大家分享一下Android中的资源与国际化的问题
摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...
- Android 中文 API (29) —— CompoundButton
前言 本章内容是android.widget.CompoundButton,翻译来自德罗德,再次感谢德罗德 !期待你一起参与Android API 的中文翻译,联系我over140@gmail.com ...
- Android应用程序资源的查找过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...
- Android应用程序资源的编译和打包过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8744683 我们知道,在一个APK文件中,除了 ...
- android 中文 api (71) —— BluetoothServerSocket[蓝牙]
前言 本章内容是 android.bluetooth.BluetoothServerSocket,为Android蓝牙部分的章节翻译.服务器通讯套接字,与TCP ServerSocket类似.版本为 ...
- android 中文 api (72) —— BluetoothSocket[蓝牙]
前言 本章内容是 android.bluetooth.BluetoothSocket,为Android蓝牙部分的章节翻译.蓝牙通讯套接字,代表了与远端设备的连接点,使用socket本地程序可以通过 ...
- Android中文API (109) —— SimpleCursorTreeAdapter
前言 本章内容是android.widget.SimpleCursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",含示例代码,欢迎访问它的博客 ...
- Android中文API (110) —— CursorTreeAdapter
前言 本章内容是android.widget.CursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",欢迎访问它的博客:"http: ...
随机推荐
- 浅谈AutoResetEvent的用法
using System;using System.Threading; namespace AutoResetEvent_Examples{ class MyMainClass { ...
- jquery合并表格中相同文本的相邻单元格
<!DOCTYPE HTML> <html> <head> <title>Example</title> <meta char ...
- easyui上次图片
easyuiForm提交: 前台代码: <form id="importFileForm" method="post" enctype="mul ...
- poj_2479 动态规划
题目大意 给定一列数,从中选择两个不相交的连续子段,求这两个连续子段和的最大值. 题目分析 典型的M子段和的问题,使用动态规划的方法来解决. f[i][j] 表示将A[1...i] 划分为j个不相交连 ...
- Objective-C实用类和协议
Objective-C实用类和协议 目录 概述 NSObject 概述 NSObject 协议<NSObject> 类NSObject 详细方法参考文档 实用操作 是否为某个类或其子类 是 ...
- FluentNhibernate 不支持存储过程
一直以为没有使用FN进行存储过程的操作,这次因为后台首页想统计下数据,就利用了存储过程,但在使用中却发现FN目前还不支持存储过程(点击查看官方),没有办法,只能利用Fluent Configurati ...
- 160302、细聊分布式ID生成方法
一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...
- Python全栈day21(函数的解耦)
针对上一篇对文件的操作程序,执行一次操作的函数查询,添加,修改,删除都需要在函数里面定义文件处理的过程,整体函数看起来比较乱,代码重复过多 下面新定义一个函数专门用于处理文件操作,然后在不同的函数里面 ...
- Code Forces 645A Amity Assessment
A. Amity Assessment time limit per test2 seconds memory limit per test256 megabytes inputstandard in ...
- poj3585 Accumulation Degree【树形DP】【最大流】
Accumulation Degree Time Limit: 5000MS Memory Limit: 65536K Total Submissions:3151 Accepted: 783 ...