String s ="一";
byte[] b =s.getBytes();
System.out.println(b[0]);
System.out.println(b.length+"-"+s.getBytes().length);
以上代码分别把UTF-8和GBK两份,分别运行以上程序,居然得到两种结果。。。
求原因。。。
正常啊。当你用UTF-8保存代码的时候,s 的内容是UTF-8里面对应的”一“,占3个byte。当你用GBK保存代码的时候, s 的内容是GBK里面对应的“一”,占两个 bytes。所以结果当然不一样了。
关键是 UTF-8以 3 个byte 来储存数据, GBK以 2 个 byte 来储存数据。
[quote]
UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符(Unicode 范围由 U+0000 至 U+007F)只需一个字节,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语(Unicode 范围由 U+0080 至 U+07FF)需要二个字节,其他基本多文种平面(BMP)中的字符(CJK属于此类-Qieqie注)使用三个字节,其他 Unicode 辅助平面的字符使用四字节编码。
[/quote]