Android - 编码阿拉伯语单词的问题

时间:2016-07-31 08:30:38

标签: android encoding utf-8

我在使用网络编码阿拉伯语回复时遇到问题,我正在使用排球来调用网络服务

我尝试解决此问题

我创建了自定义请求,然后使用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;
        }
    }

1 个答案:

答案 0 :(得分:0)

最后,我为所有面临编码问题的人找到了很好的解决方案

首先:确保你的android studio编码为utf-8,

档案 - &gt;设置 - &gt;编辑 - &gt;文件编码在编码项目中选择utf-8

reference

第二:这是诀窍,我们需要发现我们收到的编码,我们可以通过调用parseNetworkResponseresponse.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;
        }