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

标签 python unicode locale

我在 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 编码的字符串)。

我做错了什么?

最好的问候, 托马斯·科普祖克。

最佳答案

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

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

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

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:它是线程安全的,因此在设置请求明智的语言环境时并非无用。

关于Python 没有正确排序 unicode。 Strcoll 没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412933/

相关文章:

qt - Qt 是否强制系统语言环境?

python - 使用 numpy.fromfile 读取 RAW 图像 (.CR2)

python - 当您要查找的特定值不在列表中时如何说

javascript - 将 Unicode 字符转换为十六进制会导致额外字节

xml - XML 中的 Unicode 字符串

c++ - 为什么设置了中文代码页的 Windows 控制台可以显示 UTF-16 编码的字符?

Python MySQL插入Python 'series'无法转换为MySQL类型

python - 如何离线分析使用 pstats.dump_stats(filename) 创建的文件?

xml - 为什么 "control"字符在 XML 1.0 中是非法的?

java - 比较看起来相同但不相同的本地化字符串的更好方法是什么