volley开源库乱码问题总结(持续更新)

  之前Android开发一直用的是多层封装的Final框架。最近开始学习使用小巧的volley。

  在使用该框架的过程中,出现了数次乱码问题,再次做以总结。

  分别是返回数据乱码和提交参数乱码两个问题:

一、返回数据乱码

  该乱码问题比较常见。

  使用StringRequest时,返回数据乱码,观察StringRequest类下源码:

 @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
    }

  发现字符集转换的语句是

 parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 进入改函数体:
public static String parseCharset(Map<String, String> headers, String defaultCharset) {
        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 defaultCharset;
    }

  得知volley通过检查charset来判断字符集,若返回的header中没有charset,则采用默认的字符集"ISO-8859-1"

  所以当服务器返回的header不规范时,会发生乱码。

  解决方案:

  最简单的是重写parseNetworkResponse函数,例如是GBK的话:

        @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String str = null;
                try {
                    str = new String(response.data, "gbk");//这里写死不好哦
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return Response.success(str, HttpHeaderParser.parseCacheHeaders(response));
            }

  另外也可以是对源码进行修改,或者扩展StringRequest(这和重写区别不大)。

二、提交参数乱码

  一些网站提交的参数采用GBK,而不是UTF-8,所以这导致在使用Volley上传参数时乱码。

  观察Request<T>类的这个函数:

  

protected String getParamsEncoding() {
        return DEFAULT_PARAMS_ENCODING;
    }

  该函数的作用是转换参数的编码类型。其中DEFAULT_PARAMS_ENCODING为utf-8,所以默认值未utf-8,当服务器的接受参数编码不为utf-8时发生乱码。

  解决方案,例如GBK时:

  

 @Override
            protected String getParamsEncoding() {
                return "GBK";
            }

  如此即可。

  

  

时间: 2024-10-08 15:36:24

volley开源库乱码问题总结(持续更新)的相关文章

MySQL乱码收集_持续更新

1.在mysql中执行下句成功,可添加中文的. insert into book(bookName,author,publish) values('好','hao','hao'); 但是在jsp中执行这个insert 语句就会出现乱码. 解决方案:在url后面加上?useUnicode=true&characterEncoding=utf-8 2.导入txt文件中的sql语句,乱码. 先是执行show variables like '%char%'; +---------------------

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

android开发开源宝贝——持续更新。。。

2016年11月11日更新 http://www.apkbus.com/forum-417-1.html http://p.codekk.com/detail/Android/hejunlin2013/LivePlayback www.codekk.com https://github.com/Trinea/android-open-project Android 开源项目分类汇总 我们的微信公众号:codekk.二维码如下: 专注于 Android 开源分享.源码解析.框架设计.Android

iOS:开发常用GitHub开源项目(持续更新)

IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire cnoon Swift简洁网络请求库 SBJson stig Json解析引擎 JSONKit johnezang Json解析引擎 MJExtension CoderMJLee 字典转模型框架 KissXML robbiehanson XML解析 RNCryptor rnapier AES加密 F

javafx开源库收集,不断更新。。。

1.Controls fx 是一套javafx的UI库,由官方团队维护,用于支持javafx正式版中没有的UI库 地址:http://fxexperience.com/controlsfx/ 技术介绍:http://fxexperience.com/controlsfx/features/ 2. DataFX: 外部数据支持JDBC,DataSource,XML,JSON,FIle 通过安全地并发地提取数据给Controls,达到简便,安全,快速地显示数据. 关于DatFX的技术博客: http

DICOM:fo-dicom、dcm4che14、dcm4chee等开源库持续自我维护

题记: DICOM专栏系列虽然写了多年,但是依然不能解决大家日常中遇到的种种问题,其实这恰恰就是程序员(码农)工作的最大乐趣所在.就像每个人的人生一样,所处的环境不同,所遭遇的事件不同,结果自然就不同.程序开发亦是如此,操作系统不同.软件版本不同,本地配置不同都会导致种种问题. "授人以鱼不如授人以渔",所以正常的解决之道是希望通过专栏的讲解,能够让大家真正理解每个问题出现的背后原因,从而主动排查并解决问题.对于排查和解决过程中遇到的问题,我会整理总结成博文供大家参考.正如上文所说,每

我的DOM库 (持续更新)

在我的DOM库里目前有(目前的方法 都是兼容所有浏览器的) DOM.children //获取所有的子元素 children 在IE9以下 会把空白也获取成节点 //一个参数 获得指定元素下的所有子类元素 //两个参数 获得指定元素下的 指定的标签的所有子类元素 DOM.next //获得指定元素的下一个兄弟元素节点 DOM.prev //获得指定元素的上一个兄弟元素节点 DOM.nextAll //一个参数 指定标签 下面所有的元素 //两个参数 获得 指定元素下面 指定标签的所有元素 DOM

android开源应用(主要是博客上带有分析的)收集 【持续更新】

2014.5.24更新: (android高仿系列)今日头条    http://blog.csdn.net/vipzjyno1/article/details/26514543 CSDN Android客户端的制作    http://blog.csdn.net/lmj623565791/article/details/26676137 LookAround开元之旅         http://blog.csdn.net/lancees/article/details/17696805 如果

[最新].NET Core ORM 开源项目一览,持续更新

原文:[最新].NET Core ORM 开源项目一览,持续更新 截至2019-05-08共收集27个 .NET Core ORM 开源项目,38个 .NET ORM 开源项目. .NET Core ORM 开源项目收集地址:https://github.com/orm-core-group .NET ORM 开源项目收集地址:https://github.com/orm-group 如有遗漏,欢迎引荐!!! 项目名称 项目描述 代码仓库地址 Insight.Database Fast, lig