收到的GCM消息显示乱码文本

时间:2013-02-03 22:00:53

标签: android encode google-cloud-messaging

我在Google App Engine上部署了一个Servlet,它扮演的角色是向GCM发布广播消息。 Android客户端将从GCM接收该广播消息。 Servlet使用以下代码段扩展 BaseServlet

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  //when receiving a gcm broadcast request, send message to GCM
  Builder mb = new Message.Builder();
  mb.addData("message", "The message to send");
  Message message = mb.build();
  sender.sendNoRetry(message, regIds);
  ...
}

当“要发送的信息”是英文时,一切都很好。但是如果“要发送的消息”被其他语言(如中文)替换,则Android客户端将收到一串乱码文本。在Android客户端上,我使用类扩展GCMBaseIntentService来处理GCM广播。

@Override
protected void onMessage(Context context, Intent intent) {

        String message = "";
        message = intent.getStringExtra("message")!=null ? intent.getStringExtra("message") : "";
        doNotify(message);
}

我尝试重新编码邮件但不起作用。

message = new String(message.getBytes("ISO-8859-1"), "UTF-8");

对这个问题有什么想法吗?我需要你的帮助,谢谢。

1 个答案:

答案 0 :(得分:8)

尝试URLEncoder

mb.addData("message", URLEncoder.encode("世界","UTF-8");

另一种选择:

mb.addData("message", new StringEntity("世界", "UTF-8");

在查看GCM的源代码:com.google.android.gcm.server.Sender之后,它使用HttpPost作为json,而Java在内部使用UTF-16,因此在发布之前,您需要对其进行编码正常。
并且如评论所述,在客户端解码字符串

String yourAwesomeUnicodeString=URLDecoder.decode(intent.getStringExtra("message"),"UTF-8");