字符汉字编码问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 03:39:33
下面程序第一个输出为什么是14,不是字符和汉字都是占2个字节么?请高手解答。谢谢

public class Test{
public static void main(String[] args) throws Exception {
String s = "abc你好么";

byte[] bytes1 = s.getBytes("Unicode");

System.out.println(bytes1.length); // 14

byte[] bytes2 = s.getBytes();

System.out.println(bytes2.length); // 9
}
}
请解释一下,为什么第一个输出语句是结果是14?

UTF-16 charset 使用 16 位量,因此对字节顺序敏感。在这些编码中,流的字节顺序可以由 Unicode 字符 'FF' 所表示的初始字节顺序标记 来指示。按以下方式处理字节顺序标记:

进行解码时,UTF-16BE 和 UTF-16LE charset 忽略字节顺序标记;进行编码时,不写入字节顺序标记。

这是api中的两句话,如果你把Unicode改成UTF-16会出现你这样的问题,但是如果是UTF-16BE就不没有这样问题。
所以我理解就是Unicode是两位一个字符,"abc你好么"长度就是12,但是他有两位判断初始的所以加起来就是14了。
byte[] bytes2 = s.getBytes();这种写法是使用默认编码来拿,中文系统就是GBK,了英文一位,汉字两位,加起来9位了。

Unicode编码,细说,很复杂。
建议看看:
http://baike.baidu.com/view/40801.htm

这里有你需要的答案 很详细
http://www.webjx.com/exam/java/java_exam_2007_12_19_2263.html