【问题标题】:What's this text encoding?这是什么文本编码?
【发布时间】:2011-04-02 08:28:22
【问题描述】:

我使用 Python 的 imaplib 从 gmail 帐户提取邮件...但我收到了一封包含令人困惑的文本正文的电子邮件:

> RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
> OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

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

谢谢

【问题讨论】:

  • 顺便检查一下标题,你确定那里没有Content-Encoding: base64 标题吗?
  • @Piskvor - 不会有,因为它实际上以 > 为前缀,表示它是引用的回复文本。要么是写得不好的垃圾邮件,要么是一些编码不当的电子邮件客户端在回复中引用它之前没有取消 base64。
  • @Omnifarious:好点,没注意到。可以是任何一个,是的。

标签: python encoding gmail character imaplib


【解决方案1】:

它看起来像 base64。在 Python 中,您可以使用 base64.b64decodestr.decode('base64')

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

print message.decode('base64')

结果:

日期及时间:22/08/2010 14:33:03 GMT 未知 Prénom: jacinto 名称:卡瓦略 电子邮件:

é 看起来不正确。看来文本是用UTF-8编码的,所以你还需要解码UTF-8编码:

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

结果:

... 前言: ...

需要注意的另一件事是 Base64 编码的不同变体,它们用于值 62 和 63 的两个符号不同。使用 base64.b64decode 如果默认值不起作用,您可以指定这两个字符给你。

【讨论】:

  • OP 还挺幸运的,里面没有任何用户名/密码 :)
【解决方案2】:

Mark 大部分是正确的,但它也是 UTF-8 编码的,正如“Prénom”中的\uc3a9 所证明的那样。

(我正试图弄清楚为什么我得到了正确的解码而 Mark 却没有得到相同的代码,但这是另一个问题。)

【讨论】:

  • 也许你的终端默认设置为UTF-8?
  • @Mark:是的,就是这样(每天学习一些东西(我妈妈说花时间伪造护照对我没有任何好处......))
【解决方案3】:

它是 Base-64 UTF-8。这段特殊的文字说:

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

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多