2013-05-20 33 views
1

我取得使用Python和imaplib從IMAP電子郵件。在這個特定的情況下,我對To:地址有問題。不能解碼編碼 - Python和imaplib

我提取編碼:欄,分隔地址,然後嘗試每個進行解碼。我對這個特定的字符串有問題。我使用Python的decode_header函數來解碼Quoted-Printable/Base64編碼。我開始與編碼:

'=?utf-8?b?vmfzy28gugf0csoty2lv?= <[email protected]>' 

它應該是Vasco Patrício <[email protected]>(我的名字和電子郵件)。正如預期的那樣,decode_header返回一組經編碼的子串和它們的編碼的,這導致這個陣列的2元組中:

[('\xbeg\xf3\xcbo \xba\x07\xf4r\xca-\xcbio', 'utf-8'), ('<[email protected]>', None)] 

然而,當我嘗試使用這個非常簡單的代碼的第一個元組來解碼:

for part in decoded_parts: 
    if part[1]: 
     part_text = part[0].decode(part[1]) 
    else: 
     part_text = part[0] 

我獲得的UnicodeDecodeError:

UnicodeDecodeError at /api/refresh/emails/ 
'utf8' codec can't decode byte 0xbe in position 0: invalid start byte 

我可以證實,試圖通過在同一個例外控制檯結果進行解碼。

decode_header是否應該將有效的可解碼字符串與其編碼一起返回?

謝謝

回答

2

您在某處丟失了大小寫。

正確編碼的字符串是=?utf-8?b?VmFzY28gUGF0csOtY2lv?=。你的看起來是一樣的,但都是小寫的。由於Base64是區分大小寫的(它使用26個小寫字母,26個大寫字母,10個數字和另外兩個字符組成64個字母),所以小寫它當然會完全破壞它。

+0

我明白了。事實上,由於字符串檢測,我降低了案例,例如,對於「To:」頭,例如,它可以是:','TO:'或任何置換。所以我是低調的,以緩解搜索。我從來沒有想過它會打破編碼 - 我從來沒有想到我自己。感謝您的寶貴意見! –

相關問題