您的位置:首页 > 理论基础 > 计算机网络

关于Volley网络框架中文乱码的问题

2015-05-14 13:01 405 查看

问题描述:

使用StringRequest这个类访问网络的时候,返回来的数据包含中文,出现了中文乱码,无论怎么改服务端的文件或是改项目编码,或是用gbk和utf-8去重新编码返回来的字符串,都无法解决编码问题。

打开这个类的源码,看看他是如何编码。

解决方案:

打开StringRequest类的源码,处理编码的方法如下:

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}

打开HttpHeaderParser类的parseCharset方法,处理编码的方法如下:

public static String parseCharset(Map<String, String> headers) {
return parseCharset(headers, HTTP.DEFAULT_CONTENT_CHARSET);
}


其中HTTP.DEFAULT_CONTENT_CHARSET就是ISO-8859-1。这段代码会根据服务器端返回来的网页头信息获取Content-Type中的charset,如果没有获取到,默认编码就是ISO-8859-1。

只要把HTTP.DEFAULT_CONTENT_CHARSET改成需要的编码就可以了,比如我的就改成:HTTP.UTF_8。

或者直接在parseNetworkResponse方法中不根据网页头信息获取编码,而是直接指定编码:

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, <span style="font-family: KaiTi_GB2312; font-size: 18px;">HTTP.UTF_8</span>);
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
根据具体需求使用具体的方式。

Volley是Google提供的网络通信库,使得网络请求更简单、更快速。

项目地址:https://android.googlesource.com/platform/frameworks/volley
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息