[英]Why do I get a strange byte sequence using UTF-16 encoding?
byte[] byt = "君".getBytes(StandardCharsets.UTF_8);
for (byte b : byt) {
System.out.println(Integer.toBinaryString(b));
}
Output: 输出:
11111111111111111111111111100101
11111111111111111111111110010000
11111111111111111111111110011011
This is right. 这是对的。
But: 但:
byte[] byt = "君".getBytes(StandardCharsets.UTF_16);
for (byte b : byt) {
System.out.println(Integer.toBinaryString(b));
}
Output: 输出:
11111111111111111111111111111110
11111111111111111111111111111111
1010100
11011
君's hexadecimal code is 101010000011011
君的十六进制代码是
101010000011011
So: 所以:
11111111111111111111111111111110
11111111111111111111111111111111
What is this? 这是什么?
The first to bytes 0xFEFF
or 第一个到字节
0xFEFF
或
11111111111111111111111111111110
11111111111111111111111111111111
are Byte Order Mark - they tell if the rest is encoded using Big Endian or Little Endian. 是字节顺序标记-告诉他们其余部分是使用Big Endian还是Little Endian编码的。
If you don't wan't them you can set the encoding explicitly - use StandardCharsets.UTF_16LE
or StandardCharsets.UTF_16BE
如果不需要,则可以显式设置编码-使用
StandardCharsets.UTF_16LE
或StandardCharsets.UTF_16BE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.