代码点指编码表(比如Unicode)中某个字符的代码值(数字),书写时前面加U+,比如: U+0041是字母A的代码点
java中的代码单元指表示编码表字符的最小存储单元,用16位表示
Unicode 代码点 |
U+0041 |
U+00DF |
U+6771 |
U+10400 |
表示字形 |
UTF-32 代码单元 |
|
|
|
|
UTF-16 代码单元 |
|
|
|
|
UTF-8 代码单元 |
|
|
|
|
代码点(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
}
}
}