Volley解析中文字符

在使用Volley的时候,一般使用的是继承自Request<String>的StringRequest,而StringRequest中重写了两个方法:praseNetworkResponse和diliverResponse,可能还会有getParams方法,用于获取参数。

在praseNetworkResponse(NetworkResponse networkResponse)中,对networkResponse的解析是这样的:

result = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers));

这里的第二个参数指定了string的编码类型,而HttpHeaderParser的parseCharset的方法源码是这样的:

public static String parseCharset(Map<String, String> headers) {
        String contentType = (String)headers.get("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 && pair[0].equals("charset")) {
                    return pair[1];
                }
            }
        }

        return "ISO-8859-1";
    }

它会对返回头进行解读,读取Content-Type的值,若服务器添加了header信息中的Content-Type值,则此方法返回此值,否则返回默认值"iso-8859-1"。

也就是说,若服务器返回的是中文(utf-8编码),且没有指定header的Content-Type,那么Volley解析就会乱码,无法得到中文字符。

解决方法也很简单,有两种方法:

1.在客户端对返回信息进行直接解码,指定解码类型为"utf-8":

result = new String(networkResponse.data,"utf-8");
2.服务器端设置header:

HttpHeaders headers = new HttpHeaders();
header.setContentType("text/html;charset=utf-8");
这样就完成了。 再见


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值