简体   繁体   English

为什么使用UTF-16编码会得到一个奇怪的字节序列?

[英]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_16LEStandardCharsets.UTF_16BE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM