なぜAndroid Volleyで戻ってきた中国語は文字化けしているのか、postmanは正常に表示されている.
2802 ワード
それはサーバがデータを返すヘッダにcharset=UTF-8が設定されていない場合、VolleyはデフォルトでISO-8859-1にデータを伝承し、以下はソースコードであるからです.
StringRequest.java
protected Response 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 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";
}