在我的Android应用程序中,我使用Volley JsonArrayRequest加载json数据.数据是由我自己创建的,我用Sublime用UTF-8编码保存它们.当我得到响应并填充我的ListView时,文本显示不正确(变音符号).这是我的请求的样子:
JsonArrayRequest request = new JsonArrayRequest(targetUrl,
new Response.Listener() {
@Override
public void onResponse(final JSONArray response) {
try {
fillList(response);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void one rrorResponse(VolleyError error) {
}
});
requestQueue.add(request);
当我使用此方法加载完全相同的数据时,所有文本都正确显示:
final StringBuilder builder = new StringBuilder();
final HttpClient client = new DefaultHttpClient();
final HttpGet httpGet = new HttpGet(request);
try {
final HttpResponse response = client.execute(httpGet);
final StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
final HttpEntity entity = response.getEntity();
final InputStream content = entity.getContent();
final BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
所以对我来说,似乎我的json文件的编码没有问题.如何在Volley中修复此编码问题?
解决方法:
如果你知道你要求的绝对所有文件都是UTF-8格式,听起来就是这样,那么你可能会考虑强制你的Volley请求返回UTF-8格式的字符串.您可以通过继承标准JSON请求来实现此目的.像这样的东西:
public class Utf8JsonRequest extends JsonRequest {
...
@Override
protected Response parseNetworkResponse (NetworkResponse response) {
try {
String utf8String = new String(response.data, "UTF-8");
return Response.success(new JSONObject(utf8String), HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
// log error
return Response.error(new ParseError(e));
} catch (JSONException e) {
// log error
return Response.error(new ParseError(e));
}
}
}
标签:android,encoding,utf-8,android-volley
来源: https://codeday.me/bug/20190930/1837175.html