byte[] byt = "君".getBytes(StandardCharsets.UTF_8);
for (byte b : byt) {
System.out.println(Integer.toBinaryString(b));
}
输出:
11111111111111111111111111100101
11111111111111111111111110010000
11111111111111111111111110011011
这是正确的。
但是:
byte[] byt = "君".getBytes(StandardCharsets.UTF_16);
for (byte b : byt) {
System.out.println(Integer.toBinaryString(b));
}
输出:
11111111111111111111111111111110
11111111111111111111111111111111
1010100
11011
君的十六进制代码是101010000011011
所以:
11111111111111111111111111111110
11111111111111111111111111111111
这是什么?
发布于 2019-03-27 20:52:59
第一个到字节的0xFEFF
或
11111111111111111111111111111110
11111111111111111111111111111111
是字节顺序标记-它们告诉其余部分是使用大端还是小端进行编码。
如果您不需要它们,可以显式设置编码-使用StandardCharsets.UTF_16LE
或StandardCharsets.UTF_16BE
https://stackoverflow.com/questions/55377498
复制相似问题