作为世界其他地区的公民,我对计算机默认不适应处理国际问题这一事实感到非常恼火。许多网站仍然不使用 Unicode,PHP 仍处于黑暗时代。
当我想对罗马尼亚语中的单词或名称列表进行排序时,我总是必须编写自己的函数,这几乎没有效率。必须有一些区域设置使排序函数遵循指定语言的字母顺序,对吧?
我主要对 Python、Java 和 JavaScript 感兴趣。
编辑:正如 Chris Morgan 所指出的,我在这里找到了 Python 的答案。
作为世界其他地区的公民,我对计算机默认不适应处理国际问题这一事实感到非常恼火。许多网站仍然不使用 Unicode,PHP 仍处于黑暗时代。
当我想对罗马尼亚语中的单词或名称列表进行排序时,我总是必须编写自己的函数,这几乎没有效率。必须有一些区域设置使排序函数遵循指定语言的字母顺序,对吧?
我主要对 Python、Java 和 JavaScript 感兴趣。
编辑:正如 Chris Morgan 所指出的,我在这里找到了 Python 的答案。
在 Python 中,您始终可以使用带键参数的排序函数。例如,在土耳其语中,我们有 'ç'、'ı'、'ş' 等字母。如果我想根据该字母排序,我会使用对字母进行排序的键字符串,并根据这个,像这样:
>>> letters="abcçdefgğhıijklmnoöprsştuüvyz" #Turkish alphabet
>>> sorted("açobzöğge")
['a', 'b', 'e', 'g', 'o', 'z', 'ç', 'ö', 'ğ'] #Python's default
>>> sorted("açobzöğge", key=lambda i: letters.index(i))
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z'] #With key parameter
注意:使用 Python 3;处理 Unicode 更容易。
编辑,正如评论所说,如果我们使用字典,这个过程会更有效:
>>> letters="abcçdefgğhıijklmnoöprsştuüvyz"
>>> d={i:letters.index(i) for i in letters}
>>> sorted("açobzöğge", key=d.get)
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z']
没有一个统一的排序算法适用于所有语言,因为许多语言都有非常具体的排序规则。
它甚至更进一步:即使在一种语言中,排序算法也会根据它的用途而有所不同(例如,在德语词典中的排序与电话簿略有不同)。
整个主题称为Collation。关于整理顺序的维基百科文章也很相关。
似乎有一个项目可以为许多语言实现正确的排序规则,称为python-collate。