簡體   English   中英

Python decode_header 拆分原始字符串

[英]Python decode_header splits the original string

使用 Python 3,我試圖從mbox文件解析電子郵件。

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

原始電子郵件有這個獨特的From:標題

From: "=?UTF-8?Q?Mark_from_Site?=" <info@site.com>

無論如何, c

[(b'"', None), (b'Mark from Site', 'utf-8'), (b'" <info@site.com>', None)]

在這種情況下,該行在多個元素中的引號"之后意外拆分。

處理,這可能是麻煩的,因為有可能元件的列表中的一個未定義的數目(不總是像3以上),根據的數量" ,並且還可能存在其它原因分裂。

當沒有字符串編碼時(即:當標頭為純ascii ),沒有拆分並且c"Mark from Site" <info@site.com>

對於非ascii編碼,有沒有辦法避免這種拆分?

或者,否則,如何正確解析這種標題?

做最簡單的事情怎么樣,即。 將所有部分轉換為 Unicode,然后將它們粘合在一起:

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

您可以通過使用您的字符串和應該編碼的字符集創建email.header.Header實例, 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)
str(email.header.make_header(email.header.decode_header(encoded_string)))

不太明顯,但這應該解碼並正確重建標頭並將其轉換為字符串。 我也在 StackOverflow 上的某個地方找到了這個。

不確定這是否是最優雅的方式,但似乎對我有用。

有關這些函數的文檔,請參閱https://docs.python.org/3/library/email.header.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM