Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换&#XXXX;Java中UTF-8的字符_Java_Android_Unicode_Utf 8 - Fatal编程技术网

转换&#XXXX;Java中UTF-8的字符

转换&#XXXX;Java中UTF-8的字符,java,android,unicode,utf-8,Java,Android,Unicode,Utf 8,我正在使用GCM服务获取推送通知。英文信息按原样接收 但当我发送阿拉伯语信息,如时,我会收到这样的信息 和#1575نا يمني 据我所知,这是阿拉伯文Unicode。我试图按如下方式解码该消息,但我的logcat上没有任何变化 sendNotification("News: " + extras.get("message")); private void sendNotification(String ms

我正在使用GCM服务获取推送
通知
。英文信息按原样接收

但当我发送阿拉伯语信息,如
时,我会收到这样的信息

和#1575نا يمني

据我所知,这是阿拉伯文Unicode。我试图按如下方式解码该消息,但我的logcat上没有任何变化

    sendNotification("News: " + extras.get("message"));
    private void sendNotification(String msg) {
        try {
            String msgDecoded = URLDecoder.decode(msg, "UTF-8");
            Log.d(TAG, "Preparing to send notification...: " + msgDecoded);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
Edite 我也试过这种方法

    try {
        String msgDecoded = URLDecoder.decode(intent.getStringExtra("message"),"UTF-8");
        sendNotification(msgDecoded);
        Log.i(TAG, "Received: " + msgDecoded);
    } catch (UnsupportedEncodingException e) 
        e.printStackTrace();
    }
相同的结果。

和#xxxx的字符串
Cp1256
编码。下面的函数使用
Cp1256
编码对字符串进行解码

 private String convertToArabic(String value) {
        if(value.indexOf("&#")==-1)
            return value;

        String newString ="";
        value = value.replaceAll("&#","");
        String[] characters = value.split(";");
        for(int i=0; i<characters.length; i++){
            if(characters[i].startsWith(" "))
                newString +=" ";

            if(characters[i].trim().length()!=4)
                newString += characters[i].trim();
            else
                newString +=(char)Integer.valueOf(characters[i].trim()).intValue()+"";
        }

        return newString;
    }
输出:

I/System.out﹕ انا یمني

几乎是对的!一个问题是,第二个单词的第一个字母会被吃掉,就像你在回答中提到的那样,而不是被吃掉。我该如何修复它?@sabsab再次检查我的答案我将
如果
的else改为
如果
现在一切都很好!非常感谢。只是徘徊。。。在服务器端将字符串编码为Unicode更好吗?@sabsab当然可以。最好将字符更改为\uxxx编码,因为android可以轻松地将其更改为波斯语、阿拉伯语等。知道了。再次感谢@Saeed:)
I/System.out﹕ انا یمني