今天测试了一下字符串字节数和字符数,没想到出现意想不到的结果。  private static void lengthTest(){
//在JAVA中,一个char是2个字节(byte),而一个中文汉字是一个字符,也是2个字节
String str0="中";
String str1="中国";
String str2="1k";
String str6="LK";//全角
String str3=",。";//中文状态下的标点符号
String str4=",.";
String str5=",。";
System.out.println(str0+": "+str0.getBytes()+": "+str0.getBytes().length+": "+str0.length());
System.out.println(str1+": "+str1.getBytes()+": "+str1.getBytes().length+": "+str1.length());
System.out.println(str2+": "+str2.getBytes()+": "+str2.getBytes().length+": "+str2.length());
System.out.println(str6+": "+str6.getBytes()+": "+str6.getBytes().length+": "+str6.length());
System.out.println(str3+": "+str3.getBytes()+": "+str3.getBytes().length+": "+str3.length());
System.out.println(str4+": "+str4.getBytes()+": "+str4.getBytes().length+": "+str4.length());
System.out.println(str5+": "+str5.getBytes()+": "+str5.getBytes().length+": "+str5.length());

}运行结果:中: [B@1e63e3d: 3: 1
中国: [B@1004901: 6: 2
1k: [B@1b90b39: 2: 2
LK: [B@18fe7c3: 6: 2
,。: [B@b8df17: 6: 2
,.: [B@13e8d89: 2: 2
,。: [B@1be2d65: 6: 2

解决方案 »

  1.   

    这个没有错的啊,一个char类型占2个字节,一个中文占一个字符,也是占两个字节
      

  2.   

    中: [B@1e63e3d: 3: 1
    中国: [B@1004901: 6: 2
    1k: [B@1b90b39: 2: 2
    LK: [B@18fe7c3: 6: 2
    ,。: [B@b8df17: 6: 2
    ,.: [B@13e8d89: 2: 2
    ,。: [B@1be2d65: 6: 2有错的吧?注意一下,3,6,代表3个字节和6个字节
      

  3.   

    一看就是在 Eclipse 写的代码,你把你这个文件的编码改为 GBK,你现在使用的是 UTF-8。
      

  4.   

    另外,想用 getBytes 方法时,请显式地给定编码格式,比如:GBK、UTF-8 等。PS:从来没有人说过汉字就是两个字节。
      

  5.   

    嗯,我试了显示给定后,utf-8的显示是3 ,gbk,iso都显示2,
    标题起得确实有错,我所知道的是一个中文字符有2个字节或4个字节的,还是不明白为什么显示3
      

  6.   

    嗯,搞错了,iso的显示是1 个字节的
      

  7.   

    呵呵GB2312、GBK、GB18030 中汉字是占用两个字节的
    UTF-8 中的汉字至少是占用三个字节的
      

  8.   

    UTF-8 中的汉字应该是4个字节啊
      

  9.   

    JAVA说的是unicode存储方式一个字符占两个字节,也就是jvm使用的编码方式但是你getByte会进行编码转换的哦!
      

  10.   


    UTF-8 中的汉字咋会变成 4 个字节了?
      

  11.   


    UTF-8  是3个字节代表一个汉字的。你说的4个字节不知道是哪种编码方式。
    String s="中";
    print(s.getBytes()); //Windows OS中文版系统默认的gb2312编码方式:-42 -48 
    print(s.getBytes("UTF-16")); //-2 -1 78 45  前面的-2和-1是BOM
    print(s.getBytes("UTF-8")); //-28 -72 -83 
    print(s.getBytes("gb2312")); //-42 -48 
      

  12.   

    应该说绝大部分常用汉字在UTF-8中是三字节的,四字节是少量非常见CJK字符和各种各样的historic scripts
    三字节的有效信息量是BMP(Basic Multilingual Plane),两个字节
    1110yyyy 
    10yyyyxx
    10xxxxxx