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

TJ *_*oks 4 sorting collation internationalization icu

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

示例列表:

  • 苹果
  • яблоко
  • μήλο
  • 宝宝
  • βρέφος
  • ребенок

Zac*_*son 5

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

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

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

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

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


Fré*_*ans 5

以上是所有注意事项,这里有一个"标准的通用多语言排序":unicode整理算法(UCA),它不是代码点顺序.从粗略看一眼这个页面,ICU似乎处理UCA和当地偏好的混合.