1
Unicode字符U+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
是映射到U+641C [CJK Unified Ideographs]
的兼容性字符。在Java 6 NFC
正常化離開它U+FA8E
,而在Java 7它確實分解它爲U+641C
?在Java 6和7之間是否改變了NFC標準化語義?
當運行這個小片段:
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這一事實讓我感到驚訝。
我一直在閱讀更多內容,看起來好像我可能被名字中的「兼容性」所困惑。 –