2012-10-17 88 views
3

在我的MUA(雷鸟15.0.1)两个邮件主题都显示是这样的:解码UTF8邮件标题

Keine Mail zu "Abschlagsänderung" gefunden 

这里是一个片段重现它:

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中使用元音变音解析第一个标头?

+1

相关::[电子邮件标头解码UTF-8](http://stackoverflow.com/questions/7331351/python-email-header-

你可以通过更换"=?utf-8?q?=22?=解析它们decode-utf-8) –

回答

2

RFC 2047

一个“编码的字”不能一“引用的字符串”出现。

A '引用字符串' 根据RFC 822

引用字符串= < “> *(QTEXT /引述对)<”>;定期qtext或引用的字符。

所以我觉得Python库是正确的,因为

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

是带引号的字符串。以最小的引用一个更好的选择将是

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

具有"编码为=22

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

非常感谢你的回答。由于它是KMail中的一个错误,并且这个MUA并不是非常广泛的,所以我会离开我的代码。 – guettli

+0

我再次遇到KMail中的这个bug。 KMail中的错误仍然存​​在,并且已有几年之久:https://bugs.kde.org/show_bug.cgi?id = 69007 – guettli