byte[] bb="hello".getBytes("gb2312");
    System.out.println("bb.length:::"+bb.length);
    for(byte bb1:bb)
     System.out.println((char)bb1);
运行代码得到如下结果:
bb.length:::5
h
e
l
l
o
我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数组的长度应该是10啊
可结果却是却是5.我想请问gb2312中的英文字母符号到底是用几个字节表示啊?

解决方案 »

  1.   

    public int length()Returns the length of this string. The length is equal to the number of Unicode code units in the string
    所以是5个
      

  2.   

    1个,汉字的时候才是2个。gb2312,utf-8等,前面的编码跟Ascll都是一致的。
      

  3.   

    那是两个字节省去了汉字编码,因为gb2312主要是用来编码汉字的,如果你非要去编ascll,也必须得兼容阿
    可以测试一下
    String s="a";
    byte []b=s.getBytes(); 
    for(byte i:b)
    System.out.println(i);
    String ss=new String(b,"gb2312");
    System.out.println(ss);输出结果:
    97
    a你可以换成汉字,编码方式换成utf-8等试一下就知道了。
      

  4.   

    1个字节,汉字占2个,UNICODE全都是双的
      

  5.   

    在GB2312的编码中,数字和字母(也就是说ACSII码所能表示的字符)都编码成一个字节。
    所有的简体中文的汉字,被编码成两个字节。并且,汉字编码的两个字节,他们的第一个bite值都为1.
      

  6.   


    ASCII 英文一个字节 
    gb2312,gbk 中文两个字节,英文一个字节 
    在中文系统中ansi一般指gb2312或gbk 
    GB2312、GBK都属于双字节字符集 (DBCS) 
    Utf-8 中文三个字节,英文一个字节 
    Unicode 中文两个字节,英文两个字
      

  7.   

    谁让你 getBytes了,这样的话,并不代表他们占用内存的大小,而是他们自身的大小。在 java里面,都是unicode,所以都是2个字节(甚至部分三个字节), 但如果你转成了 byte,则255以内的,都是一个字节了。
      

  8.   

    大家别在这猜啊,找出权威的sun公司是如何解释GB2312
      

  9.   

    谁让你 getBytes了,这样的话,并不代表他们占用内存的大小,而是他们自身的大小。??不是一回事?....才知道的.
      

  10.   

    嘿嘿,权威的如何解释GB2312不是sun公司,而是我们国家自己的标准啊,每一个大专、大学的任何学生,其计算机基础课程中都会详细讲解GB2312的啊。
    byte[] bb="hello".getBytes("gb2312"); 
        System.out.println("bb.length:::"+bb.length); 
    我查了一些资料,都说gb2312中的所有字符都是用二个字节表示。如果是这样,那我上面的程序中bb字节数组的长度应该是10啊 
    可结果却是却是5.我想请问gb2312中的英文字母符号到底是用几个字节表示啊?
    答:GB2312中1区到15区共682个字符或图形符号都是全角方式下的字符。即:
    若byte[] bb="hello".getBytes("gb2312");(注意是全角方式下),bb字节数组的长度就会是10了。
    因此:gb2312中的所有字符都是用二个字节表示(是因为:它的字符都是全角方式)。gb2312中不会对半角方式下的字符编码的(这是ASCII码的事情),因此:在getBytes("gb2312");转换时,半角的字符都是一个字节,全角的同样字符才是两个字节。
      

  11.   

    回16楼:
    我知道GB2312是咱国家的标准,问题是在getBytes(“gb2312”),人家是如何处理的,不认识你的字
    符集?,还是视为别的字符集
      

  12.   

    你的意思是说在全角方式下输入的字符串,在getBytes("GB2312")时会按照GB2312编码的方式
    在半角方式下输入的字符串,在getBytes("GB2312")时变成了ASCII的编码方式,你觉得合理吗?
      

  13.   

    public byte[] getBytes(String charsetName)
                    throws UnsupportedEncodingException使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。 
    当此字符串不能在给定的字符集中解码时,该方法无指定的行为。当需要进一步控制解码过程时,应使用 CharsetEncoder 类。 
    参数:
    charsetName - 受支持的 charset 名称 
    返回:
    结果字节数组 
    抛出: 
    UnsupportedEncodingException - 如果指定的字符集不受支持
      

  14.   

    分区表示
    GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。01-09区为特殊符号。 
    16-55区为一级汉字,按拼音排序。 
    56-87区为二级汉字,按部首/笔画排序。 
    10-15区及88-94区则未有编码。举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。字节结构
    在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。
      

  15.   

    .length是不是字符串的长度啊?
      

  16.   

    http://www.knowsky.com/resource/gb2312tbl.htm