问题缘由是最近做了一个简单的试验,无意间发现并不是这样的。先附上代码,如下:
public class ChineseBytes {
public static void main(String[] args) {
String str=new String("你好,世界。");
System.out.print("+");
for (int i = 0; i < str.getBytes().length; i++) {
System.out.print("-");
}
System.out.println("+");
System.out.println("你好,世界。");
}
}
结果如下:
+------------------+
你好,世界。
仔细一下就不对劲,平时我们都讲一个中文对应2个字节,我无聊数了一下,刚好18个字节,也就是刚好一个中文对应3个字节,难道真的是巧合吗?然后就去查了相关的资料,发现不同的编码方式字节码是不同,由于我的eclipse用的编码方式是UTF-8(因为有段时间打开网上的源码中文注释是乱码的,原是使用GBK的,才改用的UTF-8),刚好是三倍。资料显示,如果是采用GBK的话,会是2个字节,于是我试了一下:
+------------+
你好,世界。
结果果然如此。下表总结了不同的编码对应的字节数。
英文字母:
GB2312
1
GBK
1
GB18030
1
ISO-8859-1
1
UTF-8
1
UTF-16
4
UTF-16BE
2
UTF-16LE
2
中文汉字:
GB2312
2
GBK
2
GB18030
2
ISO-8859-1
1
UTF-8
3
UTF-16
4
UTF-16BE
2
UTF-16LE
2
我们可以看到,UTF-16不管中文还是英文,都是对应4个字节。英文多数都是对应1个字节,和平常所说的一个英文对应一个字节很符合,除了UTF-8以后的都是1;西欧编码(ISO-8859-1)的中文居然只有1个字节。