如何在Java中使用char显示U + FFFF上方的Unicode字符?
我需要这样的东西(如果它有效):
char u = '\u+10FFFF';
答案 0 :(得分:20)
您无法使用单个char
(包含UTF-16代码单元),但您可以使用String
:
// This represents U+10FFFF
String x = "\udbff\udfff";
可替换地:
String y = new StringBuilder().appendCodePoint(0x10ffff).toString();
这是一个surrogate pair(两个UTF-16代码单元组合在一起构成基本多语言平面之外的单个Unicode代码点)。当然,您需要显示数据的任何内容来应对它......
答案 1 :(得分:4)
您也可以使用函数,而不是使用StringBuilder 直接在类Character中找到。功能是 toChars(),它有以下规范:
将指定的字符(Unicode代码点)转换为
其UTF-16表示存储在{@code char}数组中。
因此,您无需确切了解代理对的外观 喜欢并直接使用代码点。一个示例代码 然后看起来如下:
int x = 0x10FFFF;
String y = new String(Character.toChars(ch));
请注意,代码点的数据类型是int而不是char。
答案 2 :(得分:2)
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代码单元用于16位字符值,这些值是UTF-16的代码单元编码
答案 3 :(得分:1)
Unicode字符可能需要两个以上的字节,而这些字节通常不能保存在字符中。