转换&#XXXX;Java中UTF-8的字符
我正在使用GCM服务获取推送转换&#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
通知
。英文信息按原样接收
但当我发送阿拉伯语信息,如时,我会收到这样的信息
和#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﹕ انا یمني