我正在使用Volley从网站下载文本文件。
这是示例文本文件的内容:
NEONWönn30€KostümgrößterSpaß TESTTESTTESTTEST★★★★TESTTEST ::: TEST
我把它放在记事本中并在SaveFileDialog中选择“编码UTF-8”。 在服务器管理器的Filezilla中,我在上传文件之前选择了“强制UTF-8”。
当我使用Volley下载时,响应将如下所示:
NEONWönn30â¬KostümgröÃterSpaà TESTTESTTESTTESTââââTESTTEST::: TEST
这是我的方法:
public static void getRequest(String url) {
RequestQueue queue = Volley.newRequestQueue(activity);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//response is gibberish :/
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VolleyError", error.toString());
}
});
stringRequest.setShouldCache(false);
// Add the request to the RequestQueue.
queue.add(stringRequest);
}
有没有办法通过强制Volley使用UTF-8编码来解决这个问题?
答案 0 :(得分:1)
我不得不覆盖这种方法:
@Override
protected Response<String> parseNetworkResponse(
NetworkResponse response) {
String strUTF8 = null;
try {
strUTF8 = new String(response.data, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return Response.success(strUTF8,
HttpHeaderParser.parseCacheHeaders(response));
}
答案 1 :(得分:0)
我正在使用一台服务器(我无法控制),该服务器发送回UTF-8响应,而未在content-type标头中设置字符集。在这种情况下,Volley当前默认为ISO-8859-1。
我只是想更改默认字符集,而不必强制每个对UTF-8的响应。我最终只是使用parseNetworkResponse()来拦截Volley的响应处理,并检查响应头中是否缺少字符集。如果丢失,我强迫它看起来像服务器说“ charset = UTF-8”,然后继续进行正常处理。
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
// Volley's default charset is "ISO-8859-1". If no charset is specified, we want to default to UTF-8.
String charset = HttpHeaderParser.parseCharset(response.headers, null);
if (null == charset) {
String contentType = response.headers.get("Content-Type");
contentType = (null != contentType) ? (contentType + ";charset=UTF-8") : "charset=UTF-8";
response.headers.put("Content-Type", contentType);
}
return super.parseNetworkResponse(response);
}