为什么用Android Volley时返回的中文是乱码,而postman却显示正常

本文详细解释了在使用Volley框架进行网络请求时,如果服务器返回的数据头中未指定charset=UTF-8,Volley如何默认使用ISO-8859-1字符集解析数据的问题。并提供了具体的源代码片段来说明这一行为。
摘要由CSDN通过智能技术生成

那是因为当服务器返回数据的header中没有设置charset=UTF-8的话,Volley会默认将数据传承ISO-8859-1,下面是源码:


StringRequest.java

protected Response<String> parseNetworkResponse(NetworkResponse response) {
    String parsed;
    try {
        parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        Log.e("-----JSON----", parsed);
        if(this.needCache && !parsed.equals(DataCache.getDataCache().queryCache(this.url))) {
            DataCache.getDataCache().saveToCache(this.url, parsed);
        }
    } catch (UnsupportedEncodingException var4) {
        parsed = new String(response.data);
    }

    return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}


HttpHeaderParser.java
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";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值