Ответ 1
Вы пытаетесь кодировать/декодировать строки, а не строки Unicode. Следующие операторы работают:
u'ç'.encode('utf8')
u'á'.encode('utf-8')
unicode(u'ç')
u'ç'.encode('utf-8','ignore')
У меня возникают проблемы с кодированием символов в 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
Вы пытаетесь кодировать/декодировать строки, а не строки Unicode. Следующие операторы работают:
u'ç'.encode('utf8')
u'á'.encode('utf-8')
unicode(u'ç')
u'ç'.encode('utf-8','ignore')
Используйте u'...'
, без префикса u
это байтовая строка, а не строка юникода.:
>>> u'ç'.encode('utf8')
'\xc3\xa7'