Character可以代表所有unicode代码点吗?

use*_*414 3 java unicode utf-16

由于Java char是16位长,我想知道它如何代表完整的unicode代码点?它只能代表65536个代码点,是吗?

Jon*_*eet 8

是的,Java char是UTF-16代码单元.如果需要在Basic Multilingual Plane之外表示Unicode字符,则需要在a中使用代理项对java.lang.String.本String类提供各种方法与完整的Unicode代码点,如工作codePointAt(index).

Java语言规范的3.1节:

Unicode标准最初设计为固定宽度的16位字符编码.它已被更改为允许其表示需要超过16位的字符.合法代码点的范围现在是U + 0000到U + 10FFFF,使用十六进制U + n表示法.代码点大于U + FFFF的字符称为增补字符.为了仅使用16位单元表示完整的字符范围,Unicode标准定义了一种名为UTF-16的编码.在此编码中,补充字符表示为16位代码单元对,第一个来自高代理范围(U + D800到U + DBFF),第二个来自低代理范围(U + DC00到U) + DFFF).对于U + 0000到U + FFFF范围内的字符,代码点和UTF-16代码单元的值是相同的.

Java编程语言使用UTF-16编码表示16位代码单元序列中的文本.一些API(主要在Character类中)使用32位整数将代码点表示为单个实体.Java平台提供了在两种表示之间进行转换的方法.

有关更多信息,请参阅Character文档.