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

Convert &#XXXX; character to UTF-8 in Java

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

但是当我发送像 انا يمني 这样的阿拉伯语消息时,我收到这样的消息

انا يمن&#1610

这是阿拉伯语 Unicode,因为我 know.I 尝试按如下方式解码该消息,但我的 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();
        }
    }

编辑 我也试过这种方法

    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;
    }

测试这个功能:

    System.out.println(convertToArabic("&#1575;&#1606;&#1575; &#1610;&#1605;&#1606;&#1610"));

输出:

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