代码之家  ›  专栏  ›  技术社区  ›  Kim Gräsman

不知道该语言的情况下折叠大小写UTF-8

  •  5
  • Kim Gräsman  · 技术社区  · 15 年前

    我正在尝试评估不同的策略来比较不区分大小写的utf-8字符串。

    我已经阅读了Unicode联盟的一些材料,尝试了ICU,并尝试了各种质量的实现替代方案。

    在很多情况下,我看到文本在简单的大小写映射和完整的大小写映射之间存在差异,我想确保我完全理解这些差异。

    正如我读到的,简单的案例映射是“上下文无关的”,也就是说,不需要知道有效负载是什么语言。由于突厥语“I/196”和“I/196”的崩溃,这将给出近似的结果。

    另一方面,完整的案例映射需要知道有效负载的语言才能执行映射。有了这些额外的信息,它可以采取特殊的措施来覆盖这样的情况:土耳其语字符串“kim”在大写时应变成“k_”m“,而英语字符串“kim”在大写时应变成“kim”。

    我说得对吗?

    是否还有其他“多方面”代码点的例子,不同语言的折叠方式不同?

    谢谢!

    更新: 提到简单的案例映射作为独立于语言的源代码之一是 ICU's documentation . 我把它解释为Unicode的真理,但也许它只是实现的一个声明?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Hans Passant    15 年前

    不,一个“完整的案例映射”是一个外壳,其中一个代码点需要被多个新的代码点替换。一个简单的事例映射是一个代码点替换。

    如果您想自己实现这个,那么Unicode CaseFolding.txt 文件对于纠正这一点至关重要。注意状态字段代码“T”,特别是在这里处理土耳其语I问题。

        2
  •  2
  •   unwind    15 年前

    好。。。大多数西方语言的辅音组合“ss”的大小写都是“ss”,但在德语中,它可能成为特殊的字母“_”。那只是“可能”,有很多涉及 usage rules 考虑。

    不过,我认为这不会直接影响整理顺序(当然欢迎任何德国人来纠正我),所以这可能是一个没有意义的问题。