2015-05-27 39 views
2

我使用Volley库制作了一个项目(BlogReader)。如果我用UTF-8编码json文件并重新加载我的AndroidStudio模拟器,列表视图变成白色(带菜单标题的白色空白)。如果我在ANSI或win-1251上再次更改json编码,它就开始工作。我更改了UTF-8上的Android文件编码设置,但没有任何更改。如何解决这个问题?Volley请求失败,UTF-8编码

PS。对不起,无法加载截图,非常低的信誉(

回答

2

假设这是一个HTTP请求,那么第一种方式是编码服务器的使用UTF-8的反应。实施取决于服务器的类型。

但是,如果你希望强制UTF8编码在所有响应,那么你需要重写的请求parseNetworkResponse例如下面这段代码是StringRequest:

public class UTF8StringRequest extends StringRequest { 
    public UTF8StringRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { 
    super(method, url, listener, errorListener); 
    } 

    public UTF8StringRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) { 
    super(url, listener, errorListener); 
    } 

    @Override 
    protected Response<String> parseNetworkResponse(NetworkResponse response) { 

    String utf8String = null; 
    try { 
     utf8String = new String(response.data, "UTF-8"); 
     return Response.success(utf8String, HttpHeaderParser.parseCacheHeaders(response)); 

    } catch (UnsupportedEncodingException e) { 
     return Response.error(new ParseError(e)); 
    } 
    } 
} 
+0

感谢您的回答,但它没有工作(。也许与谷图书馆的问题?我做这个项目没有谷,它的AlmosT工作,没有谷我不能添加图像( – Nikolai

+0

唯一的解决方案,实际上作品! – user219882

11

要显示UTF8字符串编码西里尔字母,它帮助我很多:

newStr = URLDecoder.decode(URLEncoder.encode(oldStr, "iso8859-1"),"UTF-8"); 
+1

最简单,最好的解决方案。 –

0

user2282338答案完美无缺。

我编码了响应数据,它非常适合阿拉伯文本。字符串newStr = URLDecoder.decode(URLEncoder.encode(response.toString(),“iso8859-1”),“UTF-8”);