Java 码点和代码单元
@author:Jingdai
@date:2020.09.01
概念
码点(Code Point):与一个代码表中某个字符相对应的代码值。
Unicode标准中,码点采用十六进制书写,并加上前缀U+,例如U+0041就是拉丁字母A的码点。Unicode的码点可以分为17个代码平面。第一个平面称为基本多语言平面,包括码点从U+0000到U+FFFF的经典Unicode代码;其余16个平面的码点从U+10000到U+10FFFF,包括辅助字符。
代码单元(Code Unit):UTF16采用不同长度的编码表示所有的Unicode码点,在基本多语言平面,每个字符用16位表示,称之为代码单元。而辅助字符需要用一对连续的代码单元。
Java中,char类型描述了UTF-16编码的一个代码单元。
String类相关的方法
String.length()
返回采用UTF-8编码的字符串所需的代码单元数量
String.codePointCount(int beginIndex, int endIndex)
返回字符串在给定范围内的码点数
String.charAt(int index)
返回字符串位置为
index
的代码单元int index = String.offsetByCodePoints(0, i); // 返回从0开始,i个码点后的码点索引
int cp = String.codePointAt(int index) // 返回index位置开始的码点
通过这种方法获得字符串第
i
个码点
Character类相关的方法
static char[] toChars(int codePoint)
将指定的码点转换为存储在char数组中UTF-16的表示形式
例子
下面一个小例子加深理解,代码如下:
import java.io.*; public