python - 解析 email_message ['Subject' ] 结果 3 个字符串而不是 1 个

标签 python python-2.7

我正在解析电子邮件主题并获取以 =?UTF-8?B? 开头的多个字符串(取决于主题长度) 。这是正常行为吗?如何使用一种编码将字符串连接到一个字符串?

email_message = email.message_from_string(raw_email)
print email_message['Subject']

...

=?UTF-8?B?15bXkNeqINeR15PXmden15Qg15HXodeZ16HXmdeqINeR15vXk9eZINec15TXkdeZ158g?=
 =?UTF-8?B?157Xk9eV16Ig15TXp9eZ15PXldeTINeU15bXlCDXnNeQINei15XXkdeTINeQ150g15DXoNeZINeo15U=?=
 =?UTF-8?B?16nXnSDXlNeo15HXlA==?=

编辑:

subjectDecoded, encoding = decode_header(email.utils.parseaddr(email_message['Subject'])[1])[0]
if encoding==None:
    subjectDecodedParsed = email_message['Subject']
    print 'I am NOT decoding Subject'
    print subjectDecodedParsed
else:
    subjectDecodedParsed = subjectDecoded.decode(encoding)
    print 'I am decoding subject'
    print subjectDecodedParsed.encode('utf8') #<--- Only first line will be presented here

最佳答案

您的字符串使用 Quoted-printable 进行编码MIME header 的格式。 email.header module为您处理此问题,前提是您的 subject 行已使用 CRLF (\r\n) 行分隔符正确分隔:

>>> subject = '''\
... =?UTF-8?B?15bXkNeqINeR15PXmden15Qg15HXodeZ16HXmdeqINeR15vXk9eZINec15TXkdeZ158g?=\r
...  =?UTF-8?B?157Xk9eV16Ig15TXp9eZ15PXldeTINeU15bXlCDXnNeQINei15XXkdeTINeQ150g15DXoNeZINeo15U=?=\r
...  =?UTF-8?B?16nXnSDXlNeo15HXlA==?='''
>>> from email.header import decode_header
>>> for part in decode_header(subject):
...     value = unicode(*part)
...     print part
... 
זאת בדיקה בסיסית בכדי להבין מדוע הקידוד הזה לא עובד אם אני רושם הרבה

主题(只是一个带有回车符+换行符和前导空格的字符串)跨越多行以符合 MIME 标准设置的严格行长度限制。

关于python - 解析 email_message ['Subject' ] 结果 3 个字符串而不是 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16519230/

相关文章:

python - 从多个链接中获取数据,同时存储在 Scrapy 中的一个项目中

python - 解析包含默认命名空间的 xml 以使用 lxml 获取元素值

python - 如何在odoo 8中获取pdf数据或内容

python - Numpy 和 Pandas - 用零填充 reshape

python - python 中的半唯一元组? (又名。元组主键?)

python - 在 python 中使用 compile 和 eval 时出现奇怪的问题

python-2.7 - 用唯一的 id 替换 pandas 数据框

python - 在 python 模式下使用 gdb 调试正在运行的 python 应用程序不起作用

python - 玛雅Python : matching the bounding boxes of two different objects

python - 如何在不同的进程python中增加计数器?