我遇到了同样的问题。在 Android 客户端上收到时损坏的非 ASCII 字符。我个人认为这是 Google GCM 服务器库实现中的一个问题。
在 Android GCM 库中,我看到了方法:
com.google.android.gcm.server.Sender.sendNoRetry(Message, List<String>)
该方法执行以下操作
HttpURLConnection conn = post(GCM_SEND_ENDPOINT, "application/json", requestBody)
他们应该至少指定“application/json; charset=utf-8 ”或他们使用的任何编码,或者更好的是强制它为 UTF-8。这不是一个大问题吗?
更深入地挖掘我找到了方法:
com.google.android.gcm.server.Sender.post(String, String, String)
这样做:
byte[] bytes = body.getBytes()
为什么他们使用平台默认字符集?特别是因为它不太可能与设备的默认字符集对齐。
解决问题
将以下属性作为参数传递给 JVM “ -Dfile.encoding=UTF-8 ” 这将指示 Java 在执行“blah”.getBytes() 之类的操作时使用 UTF-8 作为平台默认字符集。这是不好的做法,但是当它是别人的图书馆时,你能做什么?