简答
如果您遇到编码问题(即“?”)并且它seems就像更改默认字符集解决了问题然后你really要做的是找到使用默认字符集进行编码的代码并传递要使用的自定义字符集.
(就像 @AndreiVolgin 评论的那样:你永远不应该依赖系统默认字符集。)
更详细的解答
字符集指定如何将字符表示为数字(即字节)。
Java中所有字符串的内部字符集实际上都是UTF-16,所以自定义字符集唯一变得重要的时候是将字符串转换为字节数组时(String.getBytes()
) 或相反亦然 (new String(byte[]
).
如果您不传递像这样的字符集,则使用默认字符集String.getBytes(Charset)
or new String(byte[], Charset)
.
当使用不同的字符集进行编码时,您会看到“?”(String.getBytes()
)和解码(new String(byte[]
).
所以要摆脱'?'replace String.getBytes()
by String.getBytes(Charset)
(或者也许替换new String(byte[])
by new String(byte[], Charset)
但不知道这是否是一件事)。
对我来说,通过互联网发送一些文本时出现编码问题,因为字符串需要转换为byte[]
使用发送它HttpURLConnection.getOutputStream().write(byte[])
.
准确地说:在课堂上com.google.android.gcm.server.Sender
, 方法post(java.lang.String, java.lang.String, java.lang.String)
,第 471 行是byte[] bytes = body.getBytes();
.
我将其更改为(覆盖它)byte[] bytes = body.getBytes("UTF-8");
- 为我解决了。