public class Welcome
{
   public static void main(String[] args)
   {
      String greeting ="xx中";
      
      int n = greeting.length();
      int cpCount=greeting.codePointCount(0, greeting.length());
      System.out.println(n);
      System.out.println(cpCount);   }
}以上代码,length获取到的代码单元数量和codePointCount获取到的代码点数量一样,都是4。我的疑问是,这里的‘中’字算一个字符,代码点不应该是3吗?谢谢。

解决方案 »

  1.   

    java内部中文encoding都是两个BYTES
      

  2.   

    代码点的意思不是每个字符吗?一个汉字不正好算一个字符吗?一个汉字被编码成代码点就占两个字节。 中 = \u4e2d
      

  3.   

    代码点的意思不是每个字符吗?一个汉字不正好算一个字符吗?说白了一个代码点就是一个Unicode字符。代码单元就是代码点的集合。这就会牵扯出 字符集字符集是各种文字(包括拉丁文、西里尔文、中文、朝鲜语、日语、希伯来语和阿拉伯语)中所包含的字符的一个抽象列表,由一百多万个字符组成。字符集还包括其他符号,例如音符。Unicode 和 GB18030 标准都具有字符集。当某个标准添加了新字符时,为了保持对等,另一个标准也将添加这些字符。Unicode 定义了三种字符编码形式:UTF-8
    UTF-16
    UTF-32
    代码点和代码单元在每种编码形式中,代码点被映射到一个或多个代码单元。“代码单元”是各个编码形式中的单个单元。代码单元的大小等效于特定编码的位数测量单位:UTF-8 中的代码单元由 8 位组成。
    UTF-16 中的代码单元由 16 位组成。
    UTF-32 中的代码单元由 32 位组成。
    GB18030 中的代码单元由 8 位组成。
    每个代码点中的代码单元数映射到代码点所需的代码单元数根据编码形式是不同在。
      

  4.   


    这个 你要 去看看 jvm虚拟机 是怎么 运作的,穿进去的全是01010101010这样的。就懂个这个