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

时间:2015-01-17 14:57:22

标签: java android unicode utf-8

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

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

  

انا يمن&#1610

这是我所知道的阿拉伯语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();
    }

相同的攻击。<​​/ p>

1 个答案:

答案 0 :(得分:2)

&#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﹕ انا یمني