Android-Volley解析中文乱码
2016-01-21 14:13
176 查看
用Volley解析数据的时候,出现中文全部为乱码,出现乱码的问题,通常都是编码问题,那如果数据被加密了,是否也会乱码呢?应该也会乱码吧,不过这种情况下,就不光是中文乱码了。
在Android-HttpClient连接网络获取数据中使用HttpURLConnection 的时候,就手动去设置了编码格式:
看Volley源代码了,比较稳妥的办法。当然也有些小技巧,不是特么一定是对的方法,或者说只是针对个人的一些习惯,比如我在找Volley设置编码方式的地方,我的第一反应不是去一步一步分析源代码,从而找到设置编码方式的地方,即使我之前分析过Volley的源码,但是我依然不会首选一步步分析源码到设置编码的地方。
我通常是这么干的:既然要去解析数据,那么就跟解析挂钩,解析的英文大致是parse,然后看看volley的源文件,看看那个类名有parse,不过很幸运的是,在Volley看到有parse字样的一个类名:HttpHeaderParser.java,然后就在方法parseCharset()看到了设置编码方式的地方:
话又说回来了,为什么我说“幸运”呢,确实是幸运,这种小技巧只是针对个人的,同时也设计到代码的可读性,如果可读性低点的code,除了写代码的本人,其他人在不了解的情况下,这种小技巧完全不适用,所以为什么程序员要注重编码风格,如此可见一斑啊!
当然了,如果没有找到有Parse字样的类,可以搜一下parse,比如在ubuntu下grep 一下parse,然后再查看代码。如此幸运的话,找到需要的代码块,有时候就能很好的提高自己的一点效率,要是没有找到,就只能去分析源代码了,可能花费的时间要稍微多些。
以上就是本人在解决Volley解析中文乱码时候的一些想法了,仅供参考,有错误请帮忙指针,共同学习、进步!
在Android-HttpClient连接网络获取数据中使用HttpURLConnection 的时候,就手动去设置了编码格式:
public String getStringFromStream(InputStream in, int len) throws UnsupportedEncodingException, IOException{ Reader reader = null; reader = new InputStreamReader(in, "UTF-8"); char[] buffer = new char[len]; reader.read(buffer); return new String(buffer); }而Volley没有给我们手动设置编码格式的入口,说明被封装在代码里边,剩下的就是在Volley找到设置编码方式的code了。怎么找?
看Volley源代码了,比较稳妥的办法。当然也有些小技巧,不是特么一定是对的方法,或者说只是针对个人的一些习惯,比如我在找Volley设置编码方式的地方,我的第一反应不是去一步一步分析源代码,从而找到设置编码方式的地方,即使我之前分析过Volley的源码,但是我依然不会首选一步步分析源码到设置编码的地方。
我通常是这么干的:既然要去解析数据,那么就跟解析挂钩,解析的英文大致是parse,然后看看volley的源文件,看看那个类名有parse,不过很幸运的是,在Volley看到有parse字样的一个类名:HttpHeaderParser.java,然后就在方法parseCharset()看到了设置编码方式的地方:
/** * Returns the charset specified in the Content-Type of this header, * or the HTTP default (ISO-8859-1) if none can be found. */ public static String parseCharset(Map<String, String> headers) { String contentType = headers.get(HTTP.CONTENT_TYPE); if (contentType != null) { String[] params = contentType.split(";"); for (int i = 1; i < params.length; i++) { String[] pair = params[i].trim().split("="); if (pair.length == 2) { if (pair[0].equals("charset")) { return pair[1]; } } } } return HTTP.DEFAULT_CONTENT_CHARSET; }此方法最后返回的并不是UTF-8,所以将它改为返回UTF-8:
/** * Returns the charset specified in the Content-Type of this header, * or the HTTP default (ISO-8859-1) if none can be found. */ public static String parseCharset(Map<String, String> headers) { String contentType = headers.get(HTTP.CONTENT_TYPE); if (contentType != null) { String[] params = contentType.split(";"); for (int i = 1; i < params.length; i++) { String[] pair = params[i].trim().split("="); if (pair.length == 2) { if (pair[0].equals("charset")) { return pair[1]; } } } } return HTTP.UTF_8; }
话又说回来了,为什么我说“幸运”呢,确实是幸运,这种小技巧只是针对个人的,同时也设计到代码的可读性,如果可读性低点的code,除了写代码的本人,其他人在不了解的情况下,这种小技巧完全不适用,所以为什么程序员要注重编码风格,如此可见一斑啊!
当然了,如果没有找到有Parse字样的类,可以搜一下parse,比如在ubuntu下grep 一下parse,然后再查看代码。如此幸运的话,找到需要的代码块,有时候就能很好的提高自己的一点效率,要是没有找到,就只能去分析源代码了,可能花费的时间要稍微多些。
以上就是本人在解决Volley解析中文乱码时候的一些想法了,仅供参考,有错误请帮忙指针,共同学习、进步!
相关文章推荐
- HTML 5在Android手机上如何打开pdf文件?
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(一)
- Android学习历程6-单例模式
- Android Studio上传项目到github
- Android 判断应用处于前后台
- 为Android 5.0设计Material风格的应用程序
- android中Activity的启动方法之startActivityForResult 参数解释
- Android 自定义控件入门篇之自定义验证码
- Unable to add window -- token android.os.BinderProxy@164db98f is not valid解决办法f
- Android Gson解析
- Android Studio导入第三方类库的方法
- android从服务器获取apk安装
- EditText禁止输入Emoji表情的处理
- 新手必备的常用 Android 代码片段整理(1)
- Android Audio Architecture
- Android 三:手机adb 命令解锁
- android---listView分割线的显示和隐藏
- Android 自定义的颜色滑动转换ViewPager指示器 ColorTransformIndicator
- Fun with Android Shaders and Filters
- Android Accessibility(辅助功能) 学习