java中一个字符占两个字节,中文占两个字节,String  str="abgs你好sdf",调用str.getBytes(),转换为字节数组:为什么if(str.getBytes().length==2){
       System.out.println(str);//可以输出中文呢,字符和中文都是占俩个字节啊?字符存的是AScii,那中文存的是什么?
 
 }

解决方案 »

  1.   

    getBytes()把一个字符把一定的编码方式转为字节数组.在windows下,默认是按GBK编码的.
      

  2.   

    The Java programming language moves you toward the world of internationalized software: you write code in Unicode, an international character set standard. 
      

  3.   

    也就是说在其他操作系统下用这种方法也可能是不行啊:因为编码有可能是utf-8,iso8859-1,我测试的时候发现:一个字符不管在那种编码方式下始终是str.getBytes().length==1呢,这和一个字符占两个字节????
      

  4.   

    你是不是这个意思:
    java中一个字符占两个字节,中文占两个字节,
    那么
    "a".getBytes().length == 2;
    "中".getBytes().length == 2;
    是不是这个意思.如果是这个意思的话:
    没错,在jvm中单字母与中文都是占用两个空间。只是对于单字母而言它只用了一个字节而已。
    在进行getBytes()操作时,按照本地编码进行编码,返回字节数组,"a"中的空字节被舍弃,从而
    "a".getBytes().length == 1.
    而中文本身就是使用两个字节,所以
    "中".getBytes().length == 2;
    不知你是不是这样的疑惑
    也请高手指正。
      

  5.   

        在Java中使用Unicode标准字符集共65536(2个2的8次相乘)个字符也就是需要两个字节,所以在Java里的所有字符都存的是两个字节,这样就可以存储世界几乎所有国家的“字母表”,包括汉字·拉丁·等。
         楼主要理解汉字等也是字符,而不是只有在ascII(一个字节)码里的才叫字符(字符是指能在计算机里表示的所有符号的总称)。
         lz要明白字符存在计算机里是通过编码实现的,而编码各不相同。现在通用的是ascII(美国标准字符交换集)。而Unicode也已成为标准它包括ascII(Unicode前128个字符就是它),现在ascII已有些力不从心了。
         例如ascII里就没有汉字符也没有除英文字母以外的其他国字母,如在ascII里要是使用汉字就必须引入一个汉字库。但在Java里由于他使用unicode字集所以就不需要了。
         你说中文存什么?lz,在计算机里除了0和1外就什么都没有了。
          对于一个字符给他编码,实质是给他在这个字集里编个号:0---null存0的就表是null
      

  6.   

    java 都是用unicode编码的 两个字节
      

  7.   


    我就是这个意思:但是不明白:没错,在jvm中单字母与中文都是[color=#0000FF]占用两个空间。只是对于单字母而言它只用了一个字节而已。[/color]
    //:请指教
      

  8.   

    在java里,任何字符都是unicode存储的
    字符串的长度也是按照字符统计的,所以
    length("中国")==2
      

  9.   

    在java里面的字符时两个字节的,一个中文汉字也可以放到仪的char型数据里面(试过了)
      

  10.   


    http://topic.csdn.net/u/20081107/16/4c2a9131-9778-405f-908f-7ec91caa9a34.html这个贴讨论的是同样的问题。
    你可以看看。