String s ="一";
int v=s.charAt(0);
byte[] b=s.getBytes();
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(v);
打印结果:
b[0]=-=46
b[1]=-69
v=19968
也就是说这个一字占用两个字节,数值分别是D2BB,但使用了charAt函数就变成了4E00。这是为什么呢?
java为什么要这么处理,我看了charAt这个函数:
public char charAt(int index) {
        if ((index < 0) || (index >= count)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index + offset];
    }
它加的这个偏移量是多少呢?
这是一种什么编码方式,请教大家

解决方案 »

  1.   

    int v=s.charAt(0); 
    打出来的是汉字的UNICODE,而: byte[] b=s.getBytes(); 
    在WINOWS平台是转换成了GBK了,打出来的b[0]与b[1]是GBK的编码 
    若在LINUX,则:
     byte[] b=s.getBytes(); 转换成了UTF-8编码了
      

  2.   

    你需要的了解两个基本概念:
    byte
    char byte和char的关系,他们之间转化和字符集[编码表]的关系java内码是unicode,也就是在jvm的表达的世界中,
    涉及到文字描述信息(String[char的数组],char)都是以unicode编码字节流存放于内存中.s.getBytes() 这个方法需要制定获取字节流的字符集 ,
    getBytes(StringcharSet),
    如果你没制定,你想想会出现什么情况? 这个问题留给你吧.授人予渔 >> 授人予鱼 
      

  3.   

    int v=s.charAt(0); 
    打出来的是汉字的UNICODE,而: byte[] b=s.getBytes(); 
    在WINOWS平台是转换成了GBK了,打出来的b[0]与b[1]是GBK的编码 
    若在LINUX,则: 
    byte[] b=s.getBytes(); 转换成了UTF-8编码了