我在使用网络编码阿拉伯语回复时遇到问题,我正在使用排球来调用网络服务
我尝试解决此问题。
我创建了自定义请求,然后使用utf-8
编码解析网络响应,当我登录查看结果时,我给我的奇怪写作是我的日志{"data":null,"msg":"لا يوجد تنبيهات","status":false}
,这是我的全班,我做了一些尝试根据之前的回答fixEncodingUnicode,但所有尝试都失败了。
感谢任何帮助,谢谢
import android.text.Html;
import android.util.Log;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonObjectRequest;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
/**
* Created by mina on 7/28/2016.
*/
public class myJsonObjectRequest extends JsonObjectRequest {
public myJsonObjectRequest(int method, String url, String requestBody, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(method, url, requestBody, listener, errorListener);
}
public myJsonObjectRequest(String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(url, listener, errorListener);
}
public myJsonObjectRequest(int method, String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
public myJsonObjectRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(method, url, jsonRequest, listener, errorListener);
}
public myJsonObjectRequest(String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
super(url, jsonRequest, listener, errorListener);
}
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
response.headers.put("Content-Type",
response.headers.get("content-type"));
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
Log.v("network_response", jsonString + "encoding "+ response.headers.get("content-type"));
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));
}
}
private String DecodemyString(String msg) {
try {
return URLEncoder.encode(msg, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
public static String fixEncodingUnicode(String response) {
String str = "";
try {
str = new String(response.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String decodedStr = Html.fromHtml(str).toString();
return decodedStr;
}
}
答案 0 :(得分:0)
最后,我为所有面临编码问题的人找到了很好的解决方案
首先:确保你的android studio编码为utf-8,
档案 - &gt;设置 - &gt;编辑 - &gt;文件编码在编码项目中选择utf-8
第二:这是诀窍,我们需要发现我们收到的编码,我们可以通过调用parseNetworkResponse
在response.headers.get("content-type")
方法中进行处理。
在我的情况下我得到了字符集:utf-8表示在utf-8编码,但事实上它不是,我们如何发现这里的实际编码类型是网站检测编码https://2cyr.com/decode/,只是在网站中的文本和制作站点句柄选择编码:自动检测
它将返回粘贴的文本,所有编码向下滚动以查找写入编码(您将看到您的原始语言写作)
获取源编码:,显示为:
在我的情况下,我找到了源编码:utf-8 显示为:windows-1254
这就是为什么我创建方法修复编码问题
public static String fixEncodingUnicode(String response) {
String str = "";
try {
// displayed as desired encoding
^ ^
| |
str = new String(response.getBytes("windows-1254"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String decodedStr = Html.fromHtml(str).toString();
return decodedStr;
}