Python 2.7 нижний регистр
Когда я использую .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 вы должны использовать то, что имеет фактическое кодирование).