代码点通常指Unicode代码点。Unicode词汇表如下所述:
Codepoint(1):Unicode代码空间中的任何值;即从0到10FFFF16的整数范围。
在Java中,字符(char
)是一个无符号的16位值;即0到FFFF。
正如您所看到的,有更多的Unicode代码点可以表示为Java字符。然而,Java需要能够使用所有有效的Unicode代码点来表示文本。
Java处理这个问题的方法是将大于FFFF的码点表示为字符(代码单元)对,即
surrogate pair。这些对将一个大于FFFF的Unicode码点编码为一对16位值。这利用了Unicode代码空间的子范围(即D800到U+DFFF)保留了表示代理对的位置。有关技术细节请参见
here。
Java使用的编码方式的正确术语是
UTF-16编码格式。
另一个可能会看到的术语是
代码单元,它是特定编码中使用的最小表示单位。在UTF-16中,代码单元为16位,对应于Java的
char
。其他编码(如UTF-8、ISO 8859-1等)具有8位代码单元,而UTF-32具有32位代码单元。
该术语“字符”有许多含义。在不同的上下文中,它意味着各种不同的事物。Unicode词汇表给出了
Character的4个含义,如下所示:
引用:
字符。(1)书写语言中具有语义价值的最小组成部分;指抽象的含义和/或形状,而不是特定的形状(参见字形),但在代码表中,某种形式的视觉表示对读者的理解至关重要。
字符。(2)抽象字符的同义词。(
Abstract Character。用于组织、控制或表示文本数据的信息单元。)
字符。(3)Unicode字符编码的基本编码单元。
字符。(4)源自中国的表意书写元素的英文名称。[请参阅表意符号(2)。]
然后还有Java特定的字符含义;即16位有符号数字(类型为
char
),可能表示UTF-16编码中的完整或部分Unicode代码点。