UnicodeDecodeError: кодек ascii не может декодировать байт 0xe7 в позиции 0: порядковый номер не в диапазоне (128)

У меня возникают проблемы с кодированием символов в utf-8. Я использую Django, и я получаю эту ошибку, когда пытаюсь отправить уведомление Android с негласным текстом. Я попытался найти источник ошибки, и мне удалось выяснить, что источник ошибки не в моем проекте.

В оболочке python я печатаю:

'ç'.encode('utf8')

и я получаю эту ошибку:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)

Я получаю те же ошибки:

'á'.encode('utf-8')
unicode('ç')
'ç'.encode('utf-8','ignore')

Я получаю ошибки с smart_text, force_text и smart_bytes тоже.

Это проблема с Python, моей ОС или с другой?

Я запускаю Python 2.6.6 на Red Hat версии 4.4.7-3

Ответы

Ответ 1

Вы пытаетесь кодировать/декодировать строки, а не строки Unicode. Следующие операторы работают:

u'ç'.encode('utf8')
u'á'.encode('utf-8')
unicode(u'ç')
u'ç'.encode('utf-8','ignore')

Ответ 2

Используйте u'...', без префикса u это байтовая строка, а не строка юникода.:

>>> u'ç'.encode('utf8')
'\xc3\xa7'