代码点,代码单元 utf8 utf16 utf32

一张图读懂

UTF-8 使用一至四个字节的序列对编码 Unicode 代码点进行编码

UTF-16 使用两个或四个字节对 Unicode 代码点进行编码

UTF-32 始终使用4个字节

 java中使用:

  length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量。例如:

        Stringgreeting = "Hello";

        int n = greeting.length();// is 5

    要想得到实际的长度,即代码点数量,可以调用:

        int cpCount =greeting.codePointCount(0, greeting.length());

   调用s.charAt(n)将返回位置n的代码单元,n介于0~s.length()-1之间。字符串中的第一个代码单元位置为0 例如:

        char first =greeting.charAt(0); // first is 'H'

        char last =greeting.charAt(4); // last is 'o'

    要想得到第i个代码点,应该使用下列语句()

        int index =greeting.offsetByCodePoints(0, i);

        int cp =greeting.codePointAt(index);

网摘:
"代码点(Code Point)就是指Unicode中为字符分配的编号,一个字符只占一个代码点,例如我们说到字符“汉”,它的代码点是U+6C49.代码单元(Code Unit)则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元。例如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节;在UTF-16中,代码单元变成了两个字节(就是一个char),因为一个字符可以被编码为1个或2个char。说得再罗嗦一点,一个字符,仅仅对应一个代码点,但却可能有多个代码单元(即可能被编码为2个char)。
    以上概念绝非学术化的绕口令,这意味着当你想以一种统一的方式指定自己使用什么字符的时候,使用代码点(即你告诉你的程序,你要用Unicode中的第几个字符)总是比使用代码单元更好(因为这样做的话你还得区分情况,有时候提供一个16进制数字,有时候要提供两个)。"
 

 

posted @ 2017-12-26 16:54  java林森  阅读(422)  评论(0编辑  收藏  举报