Python无法正确排序unicode。Strcoll没有帮助

发布于 2021-01-29 19:02:27

我在OSX和Linux上的Python 2.5.1和2.6.5中使用Unicode排序规则对列表进行排序时遇到问题。

import locale   
locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')
print [i for i in sorted([u'a', u'z', u'ą'], cmp=locale.strcoll)]

应该打印:

[u'a', u'ą', u'z']

而是打印出来:

[u'a', u'z', u'ą']

总结一下-好像strcoll坏了。尝试了各种类型的变量(例如非Unicode编码的字符串)。

我做错了什么?

最好的问候,Tomasz Kopczuk。

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    显然,在所有平台上进行排序的唯一方法是使用具有PyICU绑定的ICU库(在PyPI上为PyICU)。

    在OS X:上sudo port install py26-pyicu,请注意此处描述的错误:https :
    //svn.macports.org/ticket/23429(使用Macports的乐趣)。

    不幸的是,严重缺乏PyICU的文档,但是我设法找出了它的完成方法:

    import PyICU
    collator = PyICU.Collator.createInstance(PyICU.Locale('pl_PL.UTF-8'))
    print [i for i in sorted([u'a', u'z', u'ą'], cmp=collator.compare)]
    

    这使:

    [u'a', u'ą', u'z']
    

    另一个优点-@bobince:它是线程安全的,因此在设置请求方式的语言环境时并非没有用。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看