UnicodeDecodeError: кодек ascii не может декодировать - PullRequest
8 голосов
/ 01 июля 2011

Я читаю файл, который содержит румынские слова в Python с помощью file.readline (). У меня проблема со многими символами из-за кодировки.

Пример:

>>> a = "aberație"  #type 'str'
>>> a -> 'abera\xc8\x9bie'
>>> print sys.stdin.encoding
UTF-8

Я пробовал encode () с utf-8, cp500 и т. Д., Но это не работает.

Я не могу найти правильную кодировку символов, которую я должен использовать?

спасибо заранее.

Редактировать: Цель состоит в том, чтобы сохранить слово из файла в словаре, а при печати - получить aberație, а не 'abera \ xc8 \ x9bie'

1 Ответ

15 голосов
/ 01 июля 2011

Что вы пытаетесь сделать?

Это набор байтов:

BYTES = 'abera\xc8\x9bie'

Это набор байтов, который представляет utf-8 кодировку строки "aberație". Вы декодируете байтов, чтобы получить строку Unicode:

>>> BYTES 
'abera\xc8\x9bie'
>>> print BYTES 
aberație
>>> abberation = BYTES.decode('utf-8')
>>> abberation 
u'abera\u021bie'
>>> print abberation 
aberație

Если вы хотите сохранить строку Unicode в файле, вам нужно кодировать ее в определенный формат байтов по вашему выбору:

>>> abberation.encode('utf-8')
'abera\xc8\x9bie'
>>> abberation.encode('utf-16')
'\xff\xfea\x00b\x00e\x00r\x00a\x00\x1b\x02i\x00e\x00'
...