gpt4 book ai didi

string - 何时使用 Unicode 规范化形式 NFC 和 NFD?

转载 作者:行者123 更新时间:2023-12-03 11:58:13 26 4
gpt4 key购买 nike

Unicode Normalization FAQ包括以下段落:

Programs should always compare canonical-equivalent Unicode strings as equal ... The Unicode Standard provides well-defined normalization forms that can be used for this: NFC and NFD.



并继续...

The choice of which to use depends on the particular program or system. NFC is the best form for general text, since it is more compatible with strings converted from legacy encodings. ... NFD and NFKD are most useful for internal processing.



我的问题是:

是什么让 NFC 最适合“一般文本”。什么定义了“内部处理”,为什么最好留给 NFD?最后,不管什么是“最佳”,只要使用相同的规范化形式比较两个字符串,这两种形式是否可以互换?

最佳答案

FAQ 有点误导,从它使用“应该”开始,然后是关于同一事物的“要求”的不一致使用。 Unicode 标准本身(在 FAQ 中引用)更准确。基本上,您不应该期望程序将规范等价的字符串视为不同,但也不应该期望所有程序都将它们视为相同。

实际上,这实际上取决于您的软件需要做什么。在大多数情况下,您根本不需要归一化,归一化可能会破坏数据中的基本信息。

例如,U+0387 GREEK ANO TELEIA (·) 被定义为与 U+00B7 MIDDLE DOT (·) 等效的规范。这是一个错误,因为角色真的很不同,应该以不同的方式呈现,并在处理中进行不同的处理。但改变这一点为时已晚,因为 Unicode 的这一部分已经刻在石头上。因此,如果您将数据转换为 NFC 或以其他方式丢弃规范等效字符串之间的差异,则可能会出现错误字符。

不规范化会带来风险。例如,字母“ä”可以显示为单个 Unicode 字符 U+00E4 LATIN SMALL LETTER A WITH DIAERESIS 或两个 Unicode 字符 U+0061 LATIN SMALL LETTER A U+0308 COMBINING DIAERESIS。它主要是前者,即预组合形式,但如果是后者并且您的代码测试包含“ä”的数据,仅使用预组合形式,则不会检测到后者。但是在很多情况下,您不会做这样的事情,而只是简单地存储数据、连接字符串、打印它们等。那么这两种表示可能会导致渲染有些不同。

您的软件是否以某种方式将字符数据传递给其他软件也很重要。由于幼稚的隐含假设或有意识地以记录的方式,接收者可能期望其输入是规范化的。

关于string - 何时使用 Unicode 规范化形式 NFC 和 NFD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com