android - 收到的 GCM 消息显示为乱码

标签 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");

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

最佳答案

尝试 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");

关于android - 收到的 GCM 消息显示为乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677821/

相关文章:

android - 1.6 android 应用程序上的动态壁纸

java - 使用按位运算符对密码类进行编码

python - 为什么当 python 使用 MySQLdb 时会得到不同的字符集?

PHP urlencode 函数

google-app-engine - 迁移到 Firebase 云消息传递 : What effect will importing an existing Google project have on the project?

ios - Google Cloud Messaging (iOS) 将文件放在默认应用程序文档文件夹中

ios - 适用于 iOS 的 GCM,永远不会调用 gcm 连接处理程序

android - 如何在小部件上显示其他应用程序图标?

具有渐变颜色的Android achartengine FillOutsideLine

android - 处理 Android Volley 请求序列的良好做法