![](/img/trans.png)
[英]How to decode MIME filename sent from iPhone (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.