【问题标题】:Is a string in a compatibility normal form already in the corresponding canonical normal form?兼容性范式中的字符串是否已经处于相应的规范范式中?
【发布时间】:2013-03-19 14:58:39
【问题描述】:

我的测试告诉我,从 Unicode 6.2 开始,完全兼容性分解中的所有字符都具有 NFD_Quick_Check=Yes 属性。

这让我相信 isNFKD(x) 意味着 isNFD(x),而 isNFKC(x) 意味着 isNFC(x)。

我的结论正确吗?那么稳定性呢?这些含义是否保证适用于 Unicode 标准的未来版本?

【问题讨论】:

    标签: unicode normalization unicode-normalization


    【解决方案1】:

    我发现here 声明如下:

    换句话说,NFC 和 NFKC 的组成阶段相同——只是它们的分解阶段不同,NFKC 应用兼容性分解。

    那么还有这个:

    有两种形式的规范化可以转换为复合字符:规范化形式 C 和规范化形式 KC。 它们之间的区别取决于生成的文本是与原始非规范化文本的规范等效,还是与原始非规范化文本的兼容性等效。(在 NFKC 和 NFKD 中,使用 K 表示为了兼容性,避免与代表合成的 C 混淆。)这两种类型的规范化在不同的情况下都有用。

    前三图中,NFKD形式总是和NFD形式一样NFKC形式总是和NFC形式一样,所以对于简单地说,那些列被省略了。

    这是我可以从文本中挑选出来的内容,它至少可以对您的部分问题有所启发。希望对你有帮助

    Wikipedia article里也有这个表:

    NFD Normalization Form Canonical Decomposition:字符通过规范等价分解,多个组合字符按特定顺序排列。

    NFC 规范化形式典型组合:字符被分解,然后通过规范等价重新组合。

    NFKD 规范化形式兼容性分解:字符通过兼容性分解,多个组合字符按特定顺序排列。

    NFKC 规范化形式兼容性组合:字符通过兼容性分解,然后通过规范等价重新组合。

    看看这些东西是什么的解释,我认为你不能得出结论,一个暗示另一个。 NFD按规范等价分解,而NFKD按兼容性分解。

    在同一篇文章中还指出:

    等效标准可以是规范 (NF) 或兼容性 (NFK)。

    对我来说,这意味着它要么是规范的,要么是兼容的。 NFD 和 NFKD 做不同的事情。


    在这篇implementation notes 文章中指出:

    对于所有版本,甚至在 Unicode 4.1 之前,都遵循以下政策:

    一个规范化的字符串保证是稳定的;也就是说,一旦规范化,字符串就会根据所有未来的 Unicode 版本进行规范化。

    【讨论】:

      【解决方案2】:

      你的结论是正确的。 Unicode 标准附件#15 的Design Goals 部分指出:

      toNFKC(x) = toNFC(toNFKC(x))
      toNFKD(x) = toNFD(toNFKD(x))
      

      关于稳定性,如果规范化字符串不包含任何未分配的代码点,这将适用于 Unicode 的未来版本。

      【讨论】:

      • 六个月后!非常感谢。现在有人可以向我解释我是怎么错过这个的吗? ;)
      猜你喜欢
      • 2021-08-13
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2013-06-13
      • 2015-11-14
      • 2014-05-10
      相关资源
      最近更新 更多