我最近发现您通过以下方式将字符串转换为字节数组:

String S = "ab";
byte arr[] = S.getBytes();

现在,我尝试使用 String "\u9999" ,答案是 [63] 。我认为这将是 9999 (mod 128) = 15 这实际上是我们执行 byte b = 9999 时得到的结果。 63背后的原因是什么?

最佳答案

对于 Unicode 字符,您可以在对 getBytes 的调用中指定编码:

byte arr[] = S.getBytes("UTF8");

至于为什么你会得到 63 结果,对 getBytes 的调用不带参数使用你平台的默认编码。字符 \u9999 无法在您的默认编码中正确表示,因此会变成 ? ,在 ASCII 中具有十进制值 63

10-08 08:28