Unicode组合和分解形式

时间:2015-02-18 10:18:14

标签: unicode

我知道某些字符的组合和分解变体。我也理解应用程序应该是一致的,并且在与第三方合作时使用一个或另一个并面临挑战。

我不太明白的是: - 为什么存在这两种形式 - 在实现简单的后端数据库时,我应该选择哪一个?

似乎大多数人使用的是组合形式(Windows,SMB)。另一方面,HFS +上的MacOSX使用分解形式。

例如,当使用合成和分解的重音法语e(é)时,它们在屏幕上看起来相同但搜索可能不会返回结果,并且排序可能无法按预期工作。我倾向于复合形式,但在我看来法语和Frénch(我知道这不是一个好例子)在结果集中不会“彼此接近”,可能他们应该。

我不确定Lucene在做什么...... 对我的用例有什么建议?

2015-02-19更新

问题是应该使用哪种形式的NFC或NFD来保留后端数据库中的字符串,文件名等? 此外,我正在为Windows,Linux,MacOSX实现VFS,因此返回文件系统的一致视图至关重要。 从它看: https://developer.apple.com/library/mac/qa/qa1173/_index.html Mac喜欢以分解形式接收文件名,因此必须为该平台进行标准化。

1 个答案:

答案 0 :(得分:0)

  1. 存在兼容性的组合和分解形式:有多种编码具有组合字符,Unicode必须允许所有这些编码的往返无损转换。我所知道的最令人震惊的例子是Windows-1258,它允许以组合和分解的形式表示相同的重音字符,就像Unicode一样。

    他们没有添加新的预组合字符的原因很简单,就是没有新的编码需要它。

  2. 更喜欢组合字符的主要原因是在较旧的软件中提供更好的渲染支持,并且对于大多数用例而言显而易见。这些是否重要,你必须自己决定。

  3. Lucene有几个处理此问题的过滤器,例如ICUFoldingFilter

  4. 至于排序,无论您使用组合字符还是分解字符,朴素算法都会失败。我建议使用适合您选择语言的Unicode校对库。