使用Python 3,我试图解析mbox
文件中的电子邮件。
for message in mailbox.mbox('file'):
sender = message['From']
c = decode_header(sender)
原始电子邮件具有此唯一From:
标题
From: "=?UTF-8?Q?Mark_from_Site?=" <info@site.com>
无论如何,c
是
[(b'"', None), (b'Mark from Site', 'utf-8'), (b'" <info@site.com>', None)]
在这种情况下,该行意外地在多个元素中的引号"
之后拆分。
处理这个可能很麻烦,因为根据"
的数量,列表中可能存在未定义数量的元素(并不总是如上所述),并且可能还有其他原因需要拆分。
如果没有字符串编码(即标题为纯ascii
时),则表示没有拆分,c
为"Mark from Site" <info@site.com>
。
对于非ascii
编码,有没有办法避免这种分裂?
或者,否则,如何正确解析这种标题?
答案 0 :(得分:1)
做最简单的事情,即。将所有部分转换为Unicode,然后将它们粘合在一起:
from = ''.join(t[0].decode(t[1] if t[1] else 'UTF-8') for t in decode_header(sender))
答案 1 :(得分:0)
您可以通过使用字符串创建email.header
的实例以及应编码的字符集来为您设置email.header.Header
模块句柄编码。
from email.header import Header
for message in mailbox.mbox('file'):
sender = Header(message['From'], "utf-8")
c = decode_header(sender)
答案 2 :(得分:0)
str(email.header.make_header(email.header.decode_header(encoded_string)))
不太明显,但这应该解码并正确重建标头并将其转换为字符串。我也在 StackOverflow 上的某个地方找到了这个。
不确定这是否是最优雅的方式,但似乎对我有用。
有关这些函数的文档,请参阅 https://docs.python.org/3/library/email.header.html。