Когда я использую .lower() в Python 2.7, строка не преобразуется в строчную букву ŠČŽ.
Я читал данные из словаря.
Я попытался использовать str(tt["code"]).lower(), tt["code"].lower().
Любые предложения?
Ответ 1
Используйте строки unicode:
[email protected]:~$ python
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "ŠČŽ"
ŠČŽ
>>> print "ŠČŽ".lower()
ŠČŽ
>>> print u"ŠČŽ".lower()
ščž
Увидите это маленькое u? Это означает, что он создан как объект unicode, а не объект str.
Ответ 2
Использовать unicode:
>>> print u'ŠČŽ'.lower().encode('utf8')
ščž
>>>
Вам нужно преобразовать текст в unicode, как только он войдет в вашу программу из внешнего мира, а не просто в тот момент, когда вы заметили проблему.
Соответственно, либо используйте модуль codecs для чтения в декодированном тексте, либо используйте 'bytestring'.decode('latin2') (где вместо latin2 вы должны использовать то, что имеет фактическое кодирование).