Volley接收数据后,若收到的数据header内无charset定义,则使用其默认的"ISO-8859-1"格式进行解析,导致乱码出现。
解决方法:
1. 自定义request,重写parseNetworkResponse方法:
private class mJsonRequest extends JsonObjectRequest {
/**
* <p>Description:{转码}</p>
* @author:yangbiyao@163.com
* @see com.android.volley.toolbox.JsonObjectRequest#parseNetworkResponse(com.android.volley.NetworkResponse)
*/
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
response.headers.put("HTTP.CONTENT_TYPE", "utf-8");
// String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
String jsonString = new String(response.data,"utf-8");
return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response));
}
catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
/**
* @param method
* @param url
* @param jsonRequest
* @param listener
* @param errorListener
*/
public mJsonRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener,
ErrorListener errorListener) {
super(method, url, jsonRequest, listener, errorListener);
}
/**
* @param url
* @param jsonRequest
* @param listener
* @param errorListener
*/
public mJsonRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener,
ErrorListener errorListener) {
super(url, jsonRequest, listener, errorListener);
}
}
String jsonString = new String(response.data,"utf-8");
在此转为我们想要的utf-8格式即可。
方法 2:
直接将数据转码为我们想要的utf-8(或GBK):
new String(data.getBytes("ISO-8859-1"),"utf-8")
data为乱码的数据。