1

我正在使用 Python 和 imaplib 从 IMAP 获取电子邮件。在这种特定情况下,我的 To: 地址有问题。

我提取编码的 To: 字段,分离地址,然后尝试对每个地址进行解码。我对这个特定的字符串有疑问。我正在使用 Python decode_header 函数来解码 Quoted-Printable/Base64 编码。我从编码开始:

'=?utf-8?b?vmfzy28gugf0csoty2lv?= <vasco.patricio.pessoal@gmail.com>'

应该是Vasco Patrício <vasco.patricio.pessoal@gmail.com>(我的姓名和电子邮件)。正如预期的那样,decode_header 返回一组编码的子字符串及其编码,这导致了这个由 2 个元组组成的数组:

[('\xbeg\xf3\xcbo \xba\x07\xf4r\xca-\xcbio', 'utf-8'), ('<vasco.patricio.pessoal@gmail.com>', 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 不应该返回有效的可解码字符串及其编码吗?

谢谢

4

1 回答 1

2

您在某处丢失了大写字母。

正确的编码字符串是=?utf-8?b?VmFzY28gUGF0csOtY2lv?=. 你的似乎是一样的,但都是小写的。

由于 Base64 是区分大小写的(它使用 26 个小写字母、26 个大写字母、10 个数字和另外两个字符组成 64 个字母),因此将其小写当然会完全破坏它。

于 2013-05-20T18:25:12.283 回答