如何让Android Volley StringRequest GET以UTF-8编码返回响应?它似乎只返回ISO-8859-1中的响应。
是否可以让它接受UTF-8字符串?
答案 0 :(得分:0)
StringRequest调用HttpHeaderParser.parseCharset(response.headers)从响应头获取字符集,标题中的'Content-Type'不包含'charset',默认字符集返回为'ISO-8859-1'。
StringRequest.java
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} 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 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;
}
/**
* Returns the charset specified in the Content-Type of this header,
* or the HTTP default (ISO-8859-1) if none can be found.
*/
public static String parseCharset(Map<String, String> headers) {
return parseCharset(headers, HTTP.DEFAULT_CONTENT_CHARSET);
}
所以,您可以通过两种方式解析为'UTF-8':
告诉您的网络服务器在标题中添加'内容类型'并带有'charset = UTF-8'
创建StringRequest的子类并覆盖parseNetworkResponse方法
答案 1 :(得分:0)
您可以尝试将文本从ISO-8859-1转换为UTF-8,但这很慢!
<=2