我的测试告诉我,从 Unicode 6.2 开始,完全兼容性分解中的所有字符都具有 NFD_Quick_Check=Yes 属性。
这让我相信 isNFKD(x) 意味着 isNFD(x),而 isNFKC(x) 意味着 isNFC(x)。
我的结论正确吗?那么稳定性呢?这些含义是否保证适用于 Unicode 标准的未来版本?
我的测试告诉我,从 Unicode 6.2 开始,完全兼容性分解中的所有字符都具有 NFD_Quick_Check=Yes 属性。
这让我相信 isNFKD(x) 意味着 isNFD(x),而 isNFKC(x) 意味着 isNFC(x)。
我的结论正确吗?那么稳定性呢?这些含义是否保证适用于 Unicode 标准的未来版本?
你的结论是正确的。Unicode 标准附件#15 的部分设计目标指出:
toNFKC(x) = toNFC(toNFKC(x))
toNFKD(x) = toNFD(toNFKD(x))
关于稳定性,如果规范化字符串不包含任何未分配的代码点,这将适用于 Unicode 的未来版本。
我在这里找到了以下内容:
换句话说,NFC 和 NFKC 的组成阶段是相同的——只是它们的分解阶段不同,NFKC 应用了兼容性分解。
然后还有这个:
有两种形式的规范化可以转换为复合字符:规范化形式 C 和规范化形式 KC。这些之间的区别取决于生成的文本是与原始非规范化文本的规范等效,还是与原始非规范化文本等效的兼容性。(在 NFKC 和 NFKD 中,K 用于代表兼容性,以避免与代表组合的 C 混淆。)这两种类型的归一化在不同情况下都有用。
在前三个图中,NFKD 形式始终与 NFD 形式相同,NFKC 形式始终与 NFC 形式相同,因此为简单起见,省略了这些列。
这就是我可以从文本中挑选出来的内容,它至少可以对您的部分问题有所启发。希望能帮助到你
维基百科文章中也有这张表:
NFD Normalization Form Canonical Decomposition:通过规范等价对字符进行分解,多个组合字符按特定顺序排列。
NFC Normalization Form Canonical Composition: 对字符进行分解,然后通过规范等价进行重构。
NFKD规范化形式兼容性分解:字符通过兼容性分解,多个组合字符按特定顺序排列。
NFKC 规范化形式兼容性组合: 字符通过兼容性分解,然后通过规范等价重新组合。
看看这些东西是什么的解释,我认为你不能得出结论,一个暗示另一个。NFD 通过规范等价分解,而 NFKD 通过兼容性分解。
在同一篇文章中,它还指出:
等价标准可以是规范 (NF) 或兼容性 (NFK)。
对我来说,这意味着它要么是规范的,要么是兼容的。NFD 和 NFKD 做不同的事情。
在此实施说明文章中,它指出:
对于所有版本,甚至在 Unicode 4.1 之前,都遵循以下策略:
规范化的字符串保证是稳定的;也就是说,一旦规范化,字符串就会根据所有未来的 Unicode 版本进行规范化。