在 Java 标准库中,Character.getName(0x2000A)
返回"CJK UNIFIED IDEOGRAPHS EXTENSION B 2000A"
(在 java 11、16 和 17 中,使用 unicode 版本 10 和 unicode 版本 13),而我期望"CJK UNIFIED IDEOGRAPHS-2000A"
结果让我感到惊讶,因为代码点是带有 name 的字符组的一部分"CJK UNIFIED IDEOGRAPHS-#"
,并且这些块通常从组名中派生出它们的名称,其中 # 替换为代码点编号。例如,u+FA21
返回 name的 codepoint 就是这种情况"CJK COMPATIBILITY IDEOGRAPH-FA21"
。
此规则在Unicode® Standard Annex #42 第 4.4.2 段中进行了解释
如果代码点具有属性 na(直接或通过从封闭组继承),则名称中出现的字符 # 将被解释为代码点的值。
似乎字符是通过 JDK 的“类别规则”命名的,其中字符的名称是通过以大写的代码点块的名称给出的,并附加代码点。
为什么jdk返回代码点的块名称u+2000A
处理它明显不同于u+FA21