繁体   English   中英

字符可以代表所有Unicode代码点吗?

[英]Can Character represent all unicode code point?

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

是的,Java字符是UTF-16代码单元。 如果需要在基本多语言平面之外表示Unicode字符,则需要在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位代码单元的顺序表示文本。 一些主要在Character类中的API使用32位整数将代码点表示为单独的实体。 Java平台提供了在两种表示形式之间进行转换的方法。

有关更多信息,请参见Character docs

一个char (无符号16位)可以表示最大0xFFFF的任何代码点,但不能表示更大的补充字符。 最好想到Java在char使用UTF-16编码,因此,补充字符实际上表示为char对(代理对)。 尽管一个char不能表示这样的补充字符,但Java会处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM