哪个是更好的 Unicode 规范化形式?

Posted

技术标签:

【中文标题】哪个是更好的 Unicode 规范化形式?【英文标题】:Which is the better Unicode Normalization Form? 【发布时间】:2011-07-20 09:14:35 【问题描述】:

我在 Dreamweaver 上有四个选项:C、D、KC、KD。我应该选择哪一个?为什么?

【问题讨论】:

【参考方案1】:

为了什么?保存文件,使用 NFC 作为网络字符模型使用它(严格来说,W3C 规范化坚持流在 NFC 中,并且当 html 或 XML 中的实体转换为它们所代表的字符时,它仍然在 NFC 中)。它产生实际影响的可能性很小,尽管它可以阻止一些相当模糊的问题,让某人感到不安。

规范化使某些等效序列产生相同的流。例如,U+0065 (e) 后跟 U+0301(组合锐音符)相当于单独的 U+00E9 (é)。

NFD 将所有此类字符串拆分为其组成部分(例如,将 U+00E9 转换为 U+0065,然后是 U+0301)。如果一行中有两个或多个组合字符,它们会根据给出一致性的规则重新排序(ḉ 可以有 cedilla 后跟 accute 或 accute 后跟 cedilla,我们需要一致的顺序产生相同的字符串)。大多数情况下,NFD 可用于作为其他任务的一部分的内部处理,例如去除重音或生成 NFC。

NFC 从 NFD 开始,然后在可能的情况下再次将字符组合在一起,除非有一些例外情况,以确保在一个 Unicode 版本中的规范化字符串在另一个版本中仍然如此。

NFKD 在替换某些相似字符方面比 NFD 更进一步。 ⁵ 例如被替换为 5。这会“损坏”文本(用户可能出于充分的理由合理地选择 ⁵ 而不是 5)但对于搜索很有用(在 google 上搜索“fiſh”并返回“fish”的结果,因为它将 long-s 与 short-s 相同)并在某些情况下作为限制,以避免具有相似但不同字符的安全问题。 NKFC先做NFKD,然后用和NFC一样的方式组合。

http://unicode.org/reports/tr15/ 表示完全瘦,“使用 NFC 但不要担心”重复简短的回答。

【讨论】:

以上是关于哪个是更好的 Unicode 规范化形式?的主要内容,如果未能解决你的问题,请参考以下文章

哪种形式的 unicode 规范化适合文本挖掘?

Windows:支持哪个版本的 Unicode?

如何在 Java 中规范化 Unicode 数字

规范化 SQL Server 中的 unicode 字符串?

哪个数据库(嵌入式或规范化)在可扩展性方面更好?

.NET 的 String.Normalize 有啥作用?