实际上我有一个非常简单的问题,当用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
有人可以在这里点亮一些吗?
答案 0 :(得分:2)
当您使用UTF-16时,需要定义它是小端还是大端。它与BOM或\uFEFF
或\uFFFE
一起使用了两个额外的字节。
UTF-8一次只有一个字节,因此没有字节顺序可以跟踪。
如果您使用UTF-16BE或UTF-16LE,它会定义订单,因此不需要BOM