我得到了这种奇怪的行为:
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
'de_DE.utf-8'
>>> sorted([u'<NULL', u'NULL>', u'<NULL>', u'NULL', u'a'], cmp=locale.strcoll)
[u'a', u'<NULL', u'<NULL>', u'NULL', u'NULL>']
>>> sorted(['<NULL', 'NULL>', '<NULL>', 'NULL', 'a'], cmp=locale.strcoll)
['a', 'NULL', 'NULL>', '<NULL', '<NULL>']
虽然可以在“a”之后对“<NULL”进行排序,但令我困扰的是,对于 unicode“<NULL”<“NULL”而 ANSI“NULL”<“<NULL”,尽管排序规则是相同的。
有没有办法解决这个问题?
更新:PyICU 给出的结果与上述两个不同。
>>> import PyICU
collator = PyICU.Collator.createInstance(PyICU.Locale('de_DE.UTF-8'))
>>> sorted([u'<NULL', u'NULL>', u'<NULL>', u'NULL', u'a'], cmp=collator.compare)
[u'<NULL', u'<NULL>', u'a', u'NULL', u'NULL>']