java采用unicode字符集,采用utf-16编码方式,
如下:"汉"对应的unicode编码为0x6C49,
为何转换为byte[]后,b1[0]=-70,b1[1]=-70 ?
实在搞不明白,如何与unicode中的汉字编码是如何对应的。
byte[] b1 = "汉".getBytes();

解决方案 »

  1.   

    java用unicode字符集是内部存储的字符集,和你的程序无关。
    getBytes()还有个后面带参数指定字符集的方法,不带参数就用默认字符集,这个默认字符集跟当前系统的环境变量有关。
      

  2.   

    eclipse和windows默认是gbk,所以你得到的是"汉"的gbk编码。像得到unicode就用
    "汉".getBytes("unicode");不过你得到的是4个字节,前两个你不用关心。后面两个就是你要的。
      

  3.   

    public byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 
    确实如此 try{
    byte[] b="汉".getBytes("unicode");
    System.out.println(b.length);
    for(int i=0;i<b.length;i++){
    System.out.println(b[i]);
    }
    }catch(Exception e){

    }4
    -1
    -2
    73
    108
      

  4.   

    基本搞明白了,是否这样解释:
    java用的字符集为unicode, 而UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。
    其中目前java默认的是UCS-2,即utf-16的方式,这种方式包含2种字节序,Big Endian字节序/Little Endian字节序是
    UTF-16 Big Endian:FEFF (没有含义在UCS-2中),其中FEFF为标示码
    UTF-16 Little Endian:FFFE (没有含义在UCS-2中),java默认选择Little Endian字节序,故输出顺序见上面,如果改为 byte[] b="汉".getBytes("UTF-16");
    则为:但只是高低位的保存位置不同
    -2
    -1
    108,
    73楼上输出,对应的16进制存储数据为:
    -1 ,1111 1111=-1,FF
    -2 ,1111 1110=-2,FE
    73 ,0x49=73,低位
    108, 0x6C=108,高位
    去掉无用的标志位FFFE,故还原后数据仍为0x6C49=unicode编码表中定义的东东