2017-06-13 116 views
0

使用Python 3,我試圖解析來自mbox文件的電子郵件。Python decode_header分裂原始字符串

for message in mailbox.mbox('file'): 
    sender = message['From'] 
    c = decode_header(sender) 

原始電子郵件具有這種獨特的From:

From: "=?UTF-8?Q?Mark_from_Site?=" <[email protected]> 

反正c

[(b'"', None), (b'Mark from Site', 'utf-8'), (b'" <[email protected]>', None)] 

在這種情況下,所述線被意外地分割以下引號"在多個元素。

處理此操作可能很麻煩,因爲根據"的數量,列表中可能存在未定義數量的元素(並非總是3個像上面那樣),並且還可能存在其他分裂原因。

當沒有字符串編碼時(即:當標題爲純粹的ascii時),沒有分割並且c"Mark from Site" <[email protected]>

有沒有辦法避免這種拆分還爲非ascii編碼?

或者,否則,如何正確解析這種類型的頭文件?

回答

0

你可以通過你的字符串,它應該在編碼字符集創建的email.header.Header實例有email.header模塊句柄編碼爲您服務。

from email.header import Header 

for message in mailbox.mbox('file'): 
    sender = Header(message['From'], "utf-8") 
    c = decode_header(sender) 
+0

這實際上不會拆分字符串。但是現在,標題的編碼被認爲好像它們都是'utf-8'。如果我使用'Header(message ['From'])',所有的消息都被認爲是'us-ascii'。有沒有辦法讓'Header'自己識別正確的編碼? – BowPark

1

這樣做最簡單的事情,也就是什麼。將所有部分轉換爲Unicode,然後將它們粘合在一起:

from = ''.join(t[0].decode(t[1] if t[1] else 'UTF-8') for t in decode_header(sender))