String s = "中";
byte[] b = s.getBytes("UNICODE");
System.out.println(b.length);//如果用Unicode编码的话,这里长度为4,如果用gbk编码的话长度是2,这是为什么呢
for(int i = 0;i <  b.length;i++){
System.out.write(b[i]);//如果用Unicode编码的话,显示的是乱码;如果用gbk编码的话显示正常的“中”,这又是为什么呢
}
System.out.println();

解决方案 »

  1.   

    第一个问题:UNICODE编码方式是通过四个字节来表示中文的,而GBK编码是通过两个字节来表示中文的。
    第二个问题:首先看你的本身的JAVA文件是用什么编码格式,如果你JAVA文件用的是GBK或者gb2312的话那么你用GBK输出就是“中”字了。如果用UNICODE的编码方式输出就是乱码了。
      

  2.   

    System.out.write(b[i]);这里的b是byte类型,是数字,怎么会出现乱码?还有,unicode也是两个字节表示一个字符,只不过在所有字符的开头会有FE FF这样两个字节。
      

  3.   

    UNICODE  总共7个字母 两个字母一个byte 7/2 =3.5 需要4个byte
    gbk     总共3个字母  3/2=1.5 需要 2个byte你开发环境和你用的编码要一致 不然会显示乱码额
    默认eclipse 是gbk吧~  edit->set encoding...
      

  4.   

    第一个问题:unicode 用4个字节表示一个汉字,utf-8,用3个字节表示一个汉字,gb2312、gb18030,gbk,都是用2个字节表示一个汉字。
    第二个问题:你是想打印什么?如果你想打印“中”的话,应该是System.out.write(b);接异常
    至于乱码的话,就要看你的本地OS是什么字符集,我的不会乱,GBK的。
      

  5.   

    是不是说无论byte[] b = s.getBytes("UNICODE");采用什么字符集编码,System.out.write(b[i]);的作用都是按系统默认采用的gbk输出啊,也就是说输出的字符不是gbk编码时会显示不正常?
    那么要在控制台上输出Unicode编码的字符方法又是什么呢?
      

  6.   

    把这句:System.out.write(b[i]);改成System.out.println(b[i]);就可以输出编码了。还有你输出乱码的原因是你要在eclipse里面设置一下你的console的编码格式。