程序如下:
public class CharsetTest {
       public static void main(String[] args)
       {
          String str = new String("好");
          byte[] bt = str.getBytes("Unicode");
 for(int i=0;i<bt.length;i++)
{
System.out.println(bt[i]);
}
}以上程序用Unicde字符集解码为字符序列时,会解码成4个字节,Unicode不是两个字节的编码的吗?
如果用GBK解码就没有问题。请指教,谢谢!

解决方案 »

  1.   

    一般用Unicode编码会在前面多出两个字节,即FF、FE
    如果你多加几个汉字,你会发现仍是多这两个字节,所以Unicode就是两个字节的
    而gbk没有多加什么东西
      

  2.   

    前面两个字节(0xFF 0xFE)可能是 Unicode 的前缀,不知道为什么会这样。解码两个字时,是 6 个字节。
      

  3.   

    补充下楼上的。big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。前面多的FFFE或者FEFF就表示高字节在前还是低字节在前。
      

  4.   

    to: norwolfl那 GBK、UTF-8 之类的编码就没有这种问题吗?
      

  5.   

    to: 火龙果有没有表示出来的原因可能是java使用UNICODE编码表示字符串,使用其他字符编码表示字符串时已经计算过了。