Internationalization ICU是否处理不同语言字符串列表的排序?
我的应用程序可能在一个列表中包含由不同字母/语言组成的字符串。我似乎找不到关于正确的分类方法的任何信息,也找不到ICU支持此功能的任何迹象 示例列表:Internationalization ICU是否处理不同语言字符串列表的排序?,internationalization,sorting,collation,icu,Internationalization,Sorting,Collation,Icu,我的应用程序可能在一个列表中包含由不同字母/语言组成的字符串。我似乎找不到关于正确的分类方法的任何信息,也找不到ICU支持此功能的任何迹象 示例列表: 苹果 бб μήλο 宝贝 βρέφος бббб 没有明智的方法来做好这件事。所有语言都没有统一的分类,即使是在同一个字母表中。不同的语言(基本上是文化)对单词的排序提出了不同的排序规则 我认为,保持一致的唯一方法是使用普通的旧代码点排序(例如,在Java中,String.compareTo) 根据您的数据所代表的内容,您可以提出一些启发式方
- 苹果
- бб
- μήλο
- 宝贝
- βρέφος
- бббб
- 没有明智的方法来做好这件事。所有语言都没有统一的分类,即使是在同一个字母表中。不同的语言(基本上是文化)对单词的排序提出了不同的排序规则
我认为,保持一致的唯一方法是使用普通的旧代码点排序(例如,在Java中,String.compareTo)
根据您的数据所代表的内容,您可以提出一些启发式方法。您可以根据对字母表和语言的猜测对字符串进行分组,然后对每个组使用特定于语言环境的排序。但我认为,你必须用很难的方法(自己编写代码),因为根据术语的不同,你会有不同的猜测(例如,“mar”是英语动词还是西班牙语名词?)。可以想象,在不可预测的“错误”方面,最终的结果会比简单的Unicode数字排序更糟糕
与其他任何事情一样,这取决于您可以为解决方案投入多少资金,以及您需要什么样的性能
这个建议不是您想要的答案:如果在最初存储字符串时有任何方法可以识别区域设置,那么您应该这样做,并将其记录为字符串元数据的一部分。那么你就不会有这个问题。正如@Zac所提到的,没有通用排序。代码点排序将是一致的,但可能不是用户期望的
因此,您可能应该使用用户所选区域设置的首选排序顺序。任何未按该排序顺序定义的代码点都将分组在一起。您可以将其翻译成“目标”语言(全部在一个脚本中),然后进行排序。但是语言在排序上有相互冲突的规则 除了上面的所有警告,这里有一个“标准通用多语言排序”:UCA,它不是代码点顺序。粗略地看一下,ICU似乎可以处理UCA和本地偏好的混合。新位置: