Кодировка Python ISO-8859-1 - PullRequest
       30

Кодировка Python ISO-8859-1

3 голосов
/ 13 ноября 2011

Я сталкиваюсь с огромной проблемой кодирования в Python при работе с набором символов ISO-8859-1 / Latin-1.

При использовании os.listdir для получения содержимого папки я получаю строки, закодированные в ISO-8859-1 (например: '' Ol \ xe1 Mundo ''), однако в интерпретаторе Python та же строка закодированы в другой кодировке:

In : 'Olá Mundo'.decode('latin-1')
Out: u'Ol\xa0 Mundo'

Как заставить Python декодировать строку в тот же формат? Я видел, что os.listdir возвращает строки, закодированные правильно, но интерпретатор - нет (символ «á» соответствует «\ xe1» в ISO-8859-1, а не «\ xa0»):

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

Есть мысли о том, как побороть?

1 Ответ

3 голосов
/ 14 ноября 2011

Когда вы вводите строковый литерал не в кодировке Юникод в интерактивном сеансе python2, для него предполагается системная кодировка по умолчанию.

Похоже, что вы используете Windows, и поэтому кодировка по умолчанию, вероятно, "cp850" или "cp437":

C:\>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdin.encoding
'cp850'
>>> 'Olá Mundo'
'Ol\xa0 Mundo'
>>> u'Olá Mundo'.encode('cp850')
'Ol\xa0 Mundo'

Если вы измените кодовую страницу на 1252 (что примерно эквивалентно латинице 1), строки будут отображаться, как и ожидалось:

C:\>chcp 1252
Active code page: 1252

C:\>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdin.encoding
'cp1252'
>>> 'Olá Mundo'
'Ol\xe1 Mundo'
...