【问题标题】:decode utf8 mail header [duplicate]解码utf8邮件标头[重复]
【发布时间】:2012-10-07 17:11:29
【问题描述】:

在我的 MUA (Thunderbird 15.0.1) 中,两个邮件主题都显示如下:

Keine Mail zu "Abschlagsänderung" gefunden

这里有一个 sn-p 来重现它:

import email

for subject in ['Subject: Re: Keine Mail zu "=?utf-8?q?Abschlags=C3=A4nderung?=" gefunden',
                'Subject: =?utf-8?q?Keine_Mail_zu_=22Abschlags=C3=A4nderung=22_gefunden?=']:
    msg=email.message_from_string(subject)
    print email.Header.decode_header(msg.get('subject'))

输出:

[('Re: Keine Mail zu "=?utf-8?q?Abschlags=C3=A4nderung?=" gefunden', None)]
[('Keine Mail zu "Abschlags\xc3\xa4nderung" gefunden', 'utf-8')]

python 无法解析第一个标头,但 Thunderbird 可以。它是由 KMail/1.11.4 创建的

如何在 Python 2.7 中解析第一个带有变音符号的标头?

【问题讨论】:

标签: python email utf-8


【解决方案1】:

根据RFC 2047

“编码字”不得出现在“带引号的字符串”中。

根据RFC 822 的“引用字符串”是

quoted-string = *(qtext/quoted-pair) ;常规 qtext 或带引号的字符。

所以我认为Python库是对的,因为

"=?utf-8?q?Abschlags=C3=A4nderung?="

是一个带引号的字符串。使用最少引用的更好选择是

=?utf-8?q?=22Abschlags=C3=A4nderung=22?=

" 编码为=22

您可以通过将" 替换为=?utf-8?q?=22?= 来解析它们:

>>> email.Header.decode_header('=?utf-8?q?=22?= =?utf-8?q?Abschlags=C3=A4nderung?= =?utf-8?q?=22?=')
[('"Abschlags\xc3\xa4nderung"', 'utf-8')]

【讨论】:

  • 非常感谢您的回答。由于它是 KMail 中的一个 bug,而且这个 MUA 传播的不是很广,所以我将保持我的代码不变。
  • 我在 KMail 中再次遇到了这个错误。 KMail 中的错误仍然存​​在并且已经存在好几年了:bugs.kde.org/show_bug.cgi?id=69007
猜你喜欢
  • 2010-09-12
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 2015-06-03
  • 2011-07-11
  • 2017-05-21
  • 2020-09-18
相关资源
最近更新 更多