unicode 字符U+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
是映射到的兼容性字符U+641C [CJK Unified Ideographs]
。在 Java 6NFC
规范化中留下了它U+FA8E
,而在 Java 7 中它确实将其分解为U+641C
?
运行这个小片段时:
String fancyChar = "\uFA8E";
String normalized = Normalizer.normalize(fancyChar, Normalizer.Form.NFC);
System.out.printf("%04x == %04x\n", (int)(fancyChar.charAt(0)), (int)(normalized.charAt(0)));
System.out.println(fancyChar.equals(normalized));
在 Java 6(Sun/Oracle 和 OpenJDK 的最新版本)中:
fa8e == fa8e
true
在 Java 7(Sun/Oracle 和 OpenJDK 的最新版本)中:
fa8e == 641c
false
所以我的问题是,为什么会发生这种变化?
阅读UNICODE NORMALIZATION FORMS似乎 NFC 不应该使用兼容性映射分解字符?
但 Oracle 和 OpenJDK 都已将其转换为 Java 7 的事实让我感到奇怪。