本帖最后由 liukai_2012 于 2012-06-24 15:58:41 编辑

解决方案 »

  1.   

    楼主概念还是不清楚,先弄清楚字符长度和字节长度,问题就很清楚了。
    运行下对比一下:System.out.println("计算机科学与技术".length());
    System.out.println("计算机科学与技术".getBytes().length);
      

  2.   


    补充一下,我的默认字符编码是UTF-8,所以第二个是打印24。
    在Java中,String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,举个列子如:
    byte[] b_gbk = "中".getBytes("GBK");
    byte[] b_utf8 = "中".getBytes("UTF-8");
    byte[] b_iso88591 = "中".getBytes("ISO8859-1");将分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。
      

  3.   

    有点懂了 那我稍微自己总结下 你看对不对
    同样的一串汉字在GBK、UTF-8和ISO8859-1编码下的字节长度不同 但字符长度是一样的
    我之前出现的问题
      int p = profession.length();
      out.println("专业的字符串长度为:" + p);
    输出24 应该是因为乱码的原因 我没有设置成GB2312  理论上应该是输出8的
    还有nchar(10) 所代表的也是字符长度  而一个汉字就是一个字符 所以说最多可以容纳10个字符