2013-05-20 37 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:'或任何置换。所以我是低调的,以缓解搜索。我从来没有想过它会打破编码 - 我从来没有想到我自己。感谢您的宝贵意见! –

相关问题