Подтвердить что ты не робот

Python 2.7 нижний регистр

Когда я использую .lower() в Python 2.7, строка не преобразуется в строчную букву ŠČŽ. Я читал данные из словаря.

Я попытался использовать str(tt["code"]).lower(), tt["code"].lower().

Любые предложения?

4b9b3361

Ответ 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 вы должны использовать то, что имеет фактическое кодирование).