如何在 Java 中使用 char 在 U+FFFF 上方显示 Unicode 字符?
我需要这样的东西(如果它是有效的):
char u = '\u+10FFFF';
如何在 Java 中使用 char 在 U+FFFF 上方显示 Unicode 字符?
我需要这样的东西(如果它是有效的):
char u = '\u+10FFFF';
您不能使用单个char
(包含 UTF-16 代码单元)来执行此操作,但您可以使用String
:
// This represents U+10FFFF
String x = "\udbff\udfff";
或者:
String y = new StringBuilder().appendCodePoint(0x10ffff).toString();
那是一个代理对(两个 UTF-16 代码单元,它们组合形成一个超出基本多语言平面的单个 Unicode 代码点)。当然,您也需要任何可以显示您的数据的东西来处理它......
除了 using StringBuilder
,您还可以使用直接在Character
类中找到的函数。该功能是
toChars()
,它具有以下规格:
将指定的字符(Unicode 代码点)转换为
存储在char
数组中的 UTF-16 表示形式。
所以你不需要确切地知道代理对的样子,你可以直接使用代码点。示例代码如下所示:
int ch = 0x10FFFF;
String s = new String(Character.toChars(ch));
请注意,代码点的数据类型是int
而不是char
。
char 数据类型基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。合法代码点的范围现在是 U+0000 到 U+10FFFF,称为 Unicode 标量值。
从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 2 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值,第一个来自高代理范围 (\uD800-\uDBFF),第二个来自低代理范围 (\uDC00-\uDFFF)。
因此,char 值表示基本多语言平面 (BMP) 代码点,包括代理代码点或 UTF-16 编码的代码单元。一个 int 值表示所有 Unicode 代码点,包括补充代码点。int 的低(最低)21 位用于表示 Unicode 代码点,高(最高)11 位必须为零。除非另有说明,关于补充字符和代理字符值的行为如下:
只接受 char 值的方法不支持补充字符。它们将代理范围中的 char 值视为未定义字符。例如,Character.isLetter('\uD840') 返回 false,即使此特定值后跟字符串中的任何低代理值将表示一个字母。
接受 int 值的方法支持所有 Unicode 字符,包括补充字符。例如,Character.isLetter(0x2F81A) 返回 true,因为代码点值表示一个字母(CJK 表意文字)。
在 J2SE API 文档中,Unicode 代码点用于 U+0000 到 U+10FFFF 范围内的字符值,Unicode 代码单元用于 UTF-16 编码的代码单元的 16 位字符值。
Unicode 字符可以占用两个以上的字节,这通常不能包含在一个字符中。