那是因为当服务器返回数据的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"; }
本文详细解释了在使用Volley框架进行网络请求时,如果服务器返回的数据头中未指定charset=UTF-8,Volley如何默认使用ISO-8859-1字符集解析数据的问题。并提供了具体的源代码片段来说明这一行为。

1178

被折叠的 条评论
为什么被折叠?



