字母A在UTF-16中占用的字节数是多少?

时间:2015-01-14 19:03:01

标签: java string unicode utf-8 utf-16

实际上我有一个非常简单的问题,当用Java编码时,字母“A”应该以UTF-16编码占用的最小大小(字节数)(尽管这应该是无关紧要的)。

我真的认为这个很简单:因为UTF-16是2或4个字节,字母A是一个“简单”字母,答案应该是两个,但是接着:

System.out.println("A".getBytes(StandardCharsets.UTF_8).length); // prints 1, as expected
System.out.println("A".getBytes(StandardCharsets.UTF_16).length); // prints 4, I thought it would be 2

System.out.println("AB".getBytes(StandardCharsets.UTF_8).length);// prints 2 as expected
System.out.println("AB".getBytes(StandardCharsets.UTF_16).length); // prints 6, expected 4

有人可以在这里点亮一些吗?

1 个答案:

答案 0 :(得分:2)

当您使用UTF-16时,需要定义它是小端还是大端。它与BOM或\uFEFF\uFFFE一起使用了两个额外的字节。

UTF-8一次只有一个字节,因此没有字节顺序可以跟踪。

如果您使用UTF-16BE或UTF-16LE,它会定义订单,因此不需要BOM