我有以下程序来测试Java如何处理汉字:
String s3 = "世界您好";
char[] chs = s3.toCharArray();
byte[] bs = s3.getBytes(StandardCharsets.UTF_8);
byte[] bs2 = new String(chs).getBytes(StandardCharsets.UTF_8);
System.out.println("encoding=" + Charset.defaultCharset().name() + ", " + s3 + " char[].length=" + chs.length
+ ", byte[].length=" + bs.length + ", byte[]2.length=" + bs2.length);打印出来的是:
编码=UTF-8,世界您好char[].length=4,byte[].length=12,byte[]2.length=12
其结果是:
char保存汉字,则一个汉字需要一个char[],即Java中的2个字节;byte来保存汉字,一个汉字需要3 byte[] s;我的问题是,如果两个字节足够,为什么我们使用3个字节?如果两个字节不够,为什么我们使用两个字节?
编辑:
我的JVM的默认编码设置为UTF-8。
发布于 2017-05-22 22:39:19
Java char类型将16位数据存储在一个两个字节的对象中,使用每个位来存储数据。不会这么做的。对于汉字,UTF-8只使用每字节6位来存储数据.另外两位包含控制信息。(根据人物的不同而不同。对于ASCII字符,UTF-8使用7位.)这是一个复杂的编码机制,但它允许UTF-8存储长达32位的字符.这样做的优点是,对于7位( ASCII )字符,每个字符只接受一个字节,这使得它与ASCII向后兼容。但是它需要3个字节来存储16位数据。通过在维基百科上查找它,你可以了解它是如何工作的。
https://stackoverflow.com/questions/42709916
复制相似问题