这是什么文本编码?

4 投票
3 回答
1069 浏览
提问于 2025-04-16 03:08

我用Python的imaplib从一个Gmail账户提取邮件...但是我收到了一封邮件,里面的内容让我很困惑:

> RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
> OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

谁能帮我从我的邮件中读取这个文件...

谢谢

lo

3 个回答

1

这是Base-64编码的UTF-8文本。这段特定的文字是:

Date et heure:                           22/08/2010 14:33:03 GMT Unknown
Prénom:                                   jacinto
Nom:                                     carvalho
E-Mail:                                
1

马克说得基本正确,但“Prénom”中的\uc3a9说明它也是用UTF-8编码的。

(我正在想为什么我能正确解码,而马克却不能,这个问题就另说了。)

14

看起来这是个base64编码。在Python中,你可以使用base64.b64decode或者str.decode('base64')来解码。

message = '''
RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
'''

print message.decode('base64')

结果:

Date et heure:                           22/08/2010 14:33:03 GMT Unknown
Prénom:                                   jacinto
Nom:                                     carvalho
E-Mail:

这里的é看起来不太对。可能是因为这个文本是用UTF-8编码的,所以你还需要解码UTF-8编码:

print message.decode('base64').decode('utf-8')

结果:

...
Prénom:
...

还有一点需要注意的是,Base64编码有不同的变种,它们在表示62和63这两个值时使用的符号不同。如果默认的解码方法不适合你,可以使用base64.b64decode来指定这两个字符。

撰写回答