2013-05-13 37 views
1

我解析电子邮件主题并获取多个字符串(取决于主题长度),从=?UTF-8?B?开始。这是正常的行为吗?我怎样才能用一种编码将字符串连接到一个字符串?解析email_message ['Subject']结果3字符串而不是1

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 

回答

3

你的字符串使用Quoted-printable格式MIME头编码。该email.header module为您处理此:

>>> subject = '''\ 
... =?UTF-8?B?15bXkNeqINeR15PXmden15Qg15HXodeZ16HXmdeqINeR15vXk9eZINec15TXkdeZ158g?= 
... =?UTF-8?B?157Xk9eV16Ig15TXp9eZ15PXldeTINeU15bXlCDXnNeQINei15XXkdeTINeQ150g15DXoNeZINeo15U=?= 
... =?UTF-8?B?16nXnSDXlNeo15HXlA==?=''' 
>>> from email.header import decode_header 
>>> for line in subject.splitlines(): 
...  bytes, encoding = decode_header(line)[0] 
...  print bytes.decode(encoding) 
... 
זאת בדיקה בסיסית בכדי להבין 
מדוע הקידוד הזה לא עובד אם אני רו 
שם הרבה 

的主题(这只​​是一个换行符和前导空格字符串)跨越多行,以适应由MIME标准规定的严格线长度的限制。

+0

谢谢。我编辑了这个问题。我正在使用email.header,而且我仍然只是打印出第一行 – Segev 2013-05-13 09:57:43

+0

@EXEC_BAD_ACCESS:是的,我也意识到,您会逐行解析它们,并进行更新。你可能想在解码后的行上使用'u''join()'。 – 2013-05-13 10:00:17

+0

解码之前我不能加入他们吗?任何代码都会非常有帮助。 – Segev 2013-05-13 10:05:09

相关问题