2013-05-13 78 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