Я в пути через голову. Может кто-то, пожалуйста, немой это для меня?Python UnicodeEncodeError и электронная почта
Я портирую свой код с Python 2.6 до 2.7, и вдруг я больше не могу получить полезную нагрузку по электронной почте из-за проблемы с unicode (он буквально вытаскивает один и тот же адрес электронной почты, просто используя разные версии Py. Я читаю Unicode HOWTO и получаю . потерял
следующие работы: при запуске на Python 2.6:
response = server.fetch(messages, ['RFC822'])
for msgid, data in response.iteritems():
msg_string = data['RFC822']
msg = email.message_from_string(msg_string)
body = msg.get_payload()
abody = str(body[1]) #converts the HTML instance to a string
Но когда я запускаю это под 2.7 я получаю следующее сообщение об ошибке:
File "./foo.py", line 75, in main
msg = email.message_from_string(msg_string)
File "/usr/lib/python2.7/email/__init__.py", line 57, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "/usr/lib/python2.7/email/parser.py", line 82, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 3041: ordinal not in range(128)
Так ясно, что переводчик 2.7 не любит какую-то часть сообщения электронной почты, которое я читаю. И я подозреваю, что мне нужно преобразовать тип (или как-то гадость с типом вывода), но я потерялся относительно истинной проблемы и решение.
Я нахожусь на 2 часа и могу использовать руку помощи. Благодарю.
Спасибо, но это не помогло. При дальнейшем обследовании он заставил ошибку получить бросок ранее. Не уверен, что это поможет объяснить проблему. Это все та же ошибка. Вот что я получаю ... Файл "./getAmex.py", строка 250, в основной() File "./getAmex.py", строки 70, в главном msg_string = данные [ 'RFC822'] .decode ('utf8') Файл «/usr/lib/python2.7/encodings/utf_8.py», строка 16, в декоде return codecs.utf_8_decode (ввод, ошибки, True) UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xa0' в позиции 3029: порядковый номер не в диапазоне (128) –
jond
Извините, не удалось выяснить, как получить отступ-4 для работы с этим выходом кода. :-( – jond
Я обнаружил, что в модуль электронной почты было внесено одно изменение в 2.7: [link] (http://docs.python.org/dev/whatsnew/2.7.html). В частности ... Класс сообщений модуля электронной почты будет теперь принимаем полезную нагрузку в кодировке Unicode, автоматически преобразуя полезную нагрузку в кодировку, заданную с помощью output_charset. Другое, что я сделал, это обновление RFC822 до RFC2822, но это, похоже, не имеет значения. – jond