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