在 UTF-16 中,字母 A 将占用多少字节?
What is the number of bytes that letter A will occupy in UTF-16?
实际上我有一个非常简单的问题,当在 Java 中编码时,字母 "A" 在 UTF-16 编码中应该占用的最小大小(字节数)是多少(这应该虽然无关紧要)。
我真的认为这个很简单:因为 UTF-16 是 2 或 4 个字节,字母 A 是 "simple" 一个,答案应该是两个,但是:
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
有人能给这里带来点亮光吗?
使用UTF-16时需要定义是小端还是大端。它使用 BOM 或 \uFEFF
或 \uFFFE
开头的两个额外字节。
UTF-8 一次一个字节,因此没有字节顺序可跟踪。
如果您使用 UTF-16BE 或 UTF-16LE,它会定义顺序,因此不需要 BOM
实际上我有一个非常简单的问题,当在 Java 中编码时,字母 "A" 在 UTF-16 编码中应该占用的最小大小(字节数)是多少(这应该虽然无关紧要)。
我真的认为这个很简单:因为 UTF-16 是 2 或 4 个字节,字母 A 是 "simple" 一个,答案应该是两个,但是:
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
有人能给这里带来点亮光吗?
使用UTF-16时需要定义是小端还是大端。它使用 BOM 或 \uFEFF
或 \uFFFE
开头的两个额外字节。
UTF-8 一次一个字节,因此没有字节顺序可跟踪。
如果您使用 UTF-16BE 或 UTF-16LE,它会定义顺序,因此不需要 BOM