首页 文章

ICU是否处理不同语言字符串列表的整理?

提问于
浏览
4

我的应用程序可能在单个列表中包含由不同字母/语言组成的字符串 . 我似乎无法找到有关这些分类的正确方法应该是什么的任何信息,或ICU支持此功能的任何迹象 .

示例列表:

  • Apple

  • яблоко

  • μήλο

  • 宝贝

  • βρέφος

  • ребенок

4 回答

  • 0

    除了上面的所有警告,这里有一个"standard universal multilingual sorting":unicode collation algorithm(UCA),它不是代码点顺序 . 从粗略地看一眼this page,ICU似乎处理UCA和当地偏好的混合 .

  • 5

    您可以音译为“目标”语言(所有在一个脚本中),然后排序 . 但语言对排序有相互冲突的规则 .

  • 2

    没有明智的方法可以做到这一点 . 即使在相同的字母表中,也没有针对所有语言的通用排序 . 不同的语言(基本上是文化)已经针对如何对单词进行排序提出了不同的排序规则 .

    我认为,唯一能够始终如一地执行此操作的方法是使用普通的旧代码点排序(例如,在Java,String.compareTo中) .

    你可以提出一些启发式方法,具体取决于你的数据代表什么 . 您可以根据有关字母和语言的猜测对字符串进行分组,然后对每个组使用特定于语言环境的排序 . 但是,我认为你必须以艰难的方式(自己编码)这样做,因为根据条款你会猜不同(例如,'mar'是英语动词还是西班牙语名词?) . 可以想象,就不可预测的“错误”而言,你最终会得到比天真的Unicode数字排序更糟糕的结果 .

    与其他任何事情一样,这取决于您能够承担多少费用,以及您需要什么样的性能 .

    这个建议不是您正在寻找的答案:如果在最初存储字符串时有任何方法可以识别语言环境,您应该这样做,并将其记录为字符串元数据的一部分 . 那你就不会有这个问题 .

  • 5

    正如@Zac所提到的,没有通用的排序 . 代码点排序将是一致的,但可能不是用户期望的 .

    因此,您应该使用用户所选语言环境的首选排序顺序 . 未按该排序顺序定义的任何代码点将组合在一起 .

相关问题