代码单元与代码点

代码点指编码表(比如Unicode)中某个字符的代码值(数字),书写时前面加U+,比如: U+0041是字母A的代码点

java中的代码单元指表示编码表字符的最小存储单元,用16位表示

Unicode 代码点 U+0041 U+00DF U+6771 U+10400
表示字形
UTF-32 代码单元
00000041
000000DF
00006771
00010400
UTF-16 代码单元
0041
00DF
6771
D801 DC00
UTF-8 代码单元
41
C3 9F
E6 9D B1
F0 90 90 80

 

代码点(Code Point)就是指Unicode中为字符分配的编号,一个字符只占一个代码点,例如: 我们说到字符"汉", 它的代码点是U+6C49.代码单元(Code Unit), 则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元。例如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节; 在UTF-16中,代码单元变成了两个字节(就是一个char),因为一个字符可以被编码为1个或2个char(你找不到比一个char还小的UTF-16编码的字符)。说得再罗嗦一点,一个字符,仅仅对应一个代码点,但却可能有多个代码单元(即可能被编码为2个char)

测试程序如下:

package com.itheima.point;

public class CodePointDemo {
    public static void main(String[] args) {
        String str = "张三";
        for(int i=0;i<str.length();i++){
            int index = str.offsetByCodePoints(0,i); //得到0开始偏移i个代码点的索引值
            int cp = str.codePointAt(index); //返回char值(unicode对应数字),即代码点
            System.out.print(Integer.toHexString(cp)+" ");  //5f20 4e09
        }
    }
}

 

posted @ 2016-12-16 17:10  水火379  阅读(234)  评论(0编辑  收藏  举报