Ответ 1
Отъезд py2casefold.
>>> from py2casefold import casefold
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
Python 3.3 добавляет метод casefold
к типу str, но в 2.x у меня ничего нет. Какой лучший способ обойти это?
Отъезд py2casefold.
>>> from py2casefold import casefold
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
Здесь есть поток , который охватывает некоторые из проблем (но может не разрешить все), вы можете судить, подходит ли он для того, что вам нужно. Если это нехорошо, тогда есть несколько полезных советов для реализации фальсификации событий на сайте W3C здесь.
Если PyICU уже установлен; вы можете использовать его для определения casefold()
. Используя те же строки примера, что и в ответе @Russ:
>>> import icu
>>> casefold = lambda u: unicode(icu.UnicodeString(u).foldCase())
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
>>> icu.UNICODE_VERSION
'6.3'
>>> import unicodedata
>>> unicodedata.unidata_version
'5.2.0'