当前位置: 首页 > 知识库问答 >
问题:

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

百里默
2023-03-14

我在从网络编码阿拉伯语响应时遇到问题,我正在使用volley调用网络服务

我试图解决这个问题。

我创建了自定义请求,然后在我登录时使用utf-8编码解析网络响应,以检查结果。这给了我奇怪的文字,这里是我的日志{“data”:null,“msg”:“ÙÙÙÙÙˆØØØØØØØØØØØØØØØØØØØØØØØØØ21所有尝试均失败。

谢谢你的帮助谢谢

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个答案

张献
2023-03-14

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

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

文件-

参考

第二:这里是诀窍,我们需要发现我们收到了什么编码,我们可以通过调用response.headers.get("content-type")来接近parseNetworkACK方法。

在我的例子中,我得到了字符集: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;
        }
 类似资料:
  • 问题内容: 我有一个要排序的阿拉伯语单词列表。我曾尝试使用不同的语言环境(例如英语或法语,但希望不高)使用标准的Collat​​or,甚至创建了自己的RuleBasedCollat​​or,但无济于事。显然,默认排序依赖于unicode值顺序,该顺序在许多情况下都有效,但显然不适用于此顺序。 按照javadocs的说明,RuleBasedCollat​​or需要一个字符串,该字符串以您希望它们排序

  • 问题内容: 我正在评估NLTK处理阿拉伯文本的能力,这项研究旨在分析和提取情感。 问题如下: NTLK是否可以处理并允许分析阿拉伯文本? python是否能够操纵\标记阿拉伯文本? 我可以使用Python解析和存储阿拉伯文本吗? 如果python和NTLK不是完成这项工作的工具,那么您会推荐哪些工具(如果存在)? 谢谢。 编辑 根据研究: NTLK仅能阻止阿拉伯文本:链接 Python支持UTF-

  • 问题内容: 尝试将 阿拉伯 文字保存在可编辑的PDF中。它对 英语语言来说 都可以正常工作,但是当我使用阿拉伯语单词时,出现了这个异常: java.lang.IllegalArgumentException:U + 0627在此字体Helvetica编码中不可用:WinAnsiEncoding 这是我生成PDF的方式: 问题答案: 这就是我的工作方式,希望对其他人有所帮助。只需使用要在PDF中使用

  • 试图将阿拉伯语单词保存在可编辑的PDF中。它在英语单词中都很好用,但当我使用阿拉伯语单词时,我得到了一个例外:

  • 问题内容: 像这样的一些代码块: 此代码的输出是: 如果我删除了encode(’utf-8’)输出更改,如下所示: 这种输出语言是波斯语(像阿拉伯语),我想知道为什么python3中的字符串类没有任何解码方法?您对此问题有解决方案吗? 谢谢 问题答案: 好的,我找到了解决方案,它的运行就像一个魅力 更新:ZSH脚本环境中的此问题,我使用bash,一切都找到了。

  • 我正在尝试使用最新的雅虎天气apihttps://weather-ydn-yql.media.yahoo.com/forecastrss它工作得很好,但当我设置语言(lang=ar AE)时,它返回带问号的json响应,而不是阿拉伯字符。例如“城市”:“城市”对于英语来说,这是可以的。 我没看到留档里有关于utf设置的东西 当我打开雅虎的天气页面https://www.yahoo.com/news