Получение писем не-ascii с App Engine Python приводит к странной кодировке символов - PullRequest
1 голос
/ 03 ноября 2011

Я получаю электронные письма с помощью Google App Engine Python и сохраняю их в хранилище данных.

class LogSenderHandler(InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)

Когда я получаю письмо с адреса ASCII, все работает нормально:

Me [me@gmail.com] сохраняется как Me [me@gmail.com]

Однако, если значения отправителя содержат символы не ascii,Сохраненное значение данных выглядит следующим образом:

Mr Kröber [mr.kroeber@gmail.com] сохраняется как =? ISO-8859-1? Q? Mr_Kr = F6ber?= [mr.kroeber@gmail.com]

1 Ответ

6 голосов
/ 03 ноября 2011

Объект закодирован в соответствии с RFC 2047 . См. Раздел Интернационализированные заголовки модуля email .

Вот пример декодирования субъекта в Unicode:

>>> s='=?ISO-8859-1?Q?Mr_Kr=F6ber?= [mr.kroeber@gmail.com]'
>>> from email.header import decode_header
>>> decode_header(s)
[('Mr Kr\xf6ber', 'iso-8859-1'), ('[mr.kroeber@gmail.com]', None)]
>>> u = u' '.join(w.decode(e or 'ascii') for w,e in decode_header(s))
>>> u
u'Mr Kr\xf6ber [mr.kroeber@gmail.com]'
>>> print u
Mr Kröber [mr.kroeber@gmail.com]
...