Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internationalization ICU是否处理不同语言字符串列表的排序?_Internationalization_Sorting_Collation_Icu - Fatal编程技术网

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

Internationalization ICU是否处理不同语言字符串列表的排序?,internationalization,sorting,collation,icu,Internationalization,Sorting,Collation,Icu,我的应用程序可能在一个列表中包含由不同字母/语言组成的字符串。我似乎找不到关于正确的分类方法的任何信息,也找不到ICU支持此功能的任何迹象 示例列表: 苹果 бб μήλο 宝贝 βρέφος бббб 没有明智的方法来做好这件事。所有语言都没有统一的分类,即使是在同一个字母表中。不同的语言(基本上是文化)对单词的排序提出了不同的排序规则 我认为,保持一致的唯一方法是使用普通的旧代码点排序(例如,在Java中,String.compareTo) 根据您的数据所代表的内容,您可以提出一些启发式方

我的应用程序可能在一个列表中包含由不同字母/语言组成的字符串。我似乎找不到关于正确的分类方法的任何信息,也找不到ICU支持此功能的任何迹象

示例列表:

  • 苹果
  • бб
  • μήλο
  • 宝贝
  • βρέφος
  • бббб

    • 没有明智的方法来做好这件事。所有语言都没有统一的分类,即使是在同一个字母表中。不同的语言(基本上是文化)对单词的排序提出了不同的排序规则

      我认为,保持一致的唯一方法是使用普通的旧代码点排序(例如,在Java中,String.compareTo)

      根据您的数据所代表的内容,您可以提出一些启发式方法。您可以根据对字母表和语言的猜测对字符串进行分组,然后对每个组使用特定于语言环境的排序。但我认为,你必须用很难的方法(自己编写代码),因为根据术语的不同,你会有不同的猜测(例如,“mar”是英语动词还是西班牙语名词?)。可以想象,在不可预测的“错误”方面,最终的结果会比简单的Unicode数字排序更糟糕

      与其他任何事情一样,这取决于您可以为解决方案投入多少资金,以及您需要什么样的性能


      这个建议不是您想要的答案:如果在最初存储字符串时有任何方法可以识别区域设置,那么您应该这样做,并将其记录为字符串元数据的一部分。那么你就不会有这个问题。

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


      因此,您可能应该使用用户所选区域设置的首选排序顺序。任何未按该排序顺序定义的代码点都将分组在一起。

      您可以将其翻译成“目标”语言(全部在一个脚本中),然后进行排序。但是语言在排序上有相互冲突的规则

      除了上面的所有警告,这里有一个“标准通用多语言排序”:UCA,它不是代码点顺序。粗略地看一下,ICU似乎可以处理UCA和本地偏好的混合。

      新位置: