UTF-16字符串中的字节数计算

3

为什么两个字符的UTF-16字符串只占用6个字节,而一个字符的UTF-16字符串却占用4个字节?

下面是Java中的SSCCE代码来演示这个行为:

public class UTF16Test{
    public static void main(String[] args) throws Exception {
        System.out.println("A".getBytes("UTF-16").length);
        System.out.println("AB".getBytes("UTF-16").length);
    }
}

输出:

4
6

请执行以下代码以满足我的好奇心:`System.out.println(Arrays.toString("AB".getBytes("UTF-16")));' 谢谢。 - rolfl
1
没关系,我自己解决了:[-2,-1,0,65,0,66] - 是的,字节顺序标记。 - rolfl
1个回答

5
你需要考虑UTF-16的2字节字节顺序标记吗?
你的前2个字节将是FE FFFF FE,取决于你使用的是大端还是小端机器。你应该检查一下...
我已经检查过了,是[-2,-1,0,65,0,66]
你还应该考虑到String值在内存中不占用这个额外的空间,只有当String被编码为byte[]时,字节顺序标记才会被添加...String AB在内存中将使用char[2],直到它被字节编码为byte[6]

更新了一些细节。请注意,你看到的byte[]值与存储在内存中的值不同。 - rolfl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接