这是啥文本编码?

Posted

技术标签:

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

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

> RGF0ZSBldCBoZXVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAyMi8wOC8yMDEwIDE0
> OjMzOjAzIEdNVCBVbmtub3duDQpQcsOpbm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICAgICAgamFjaW50bw0KTm9tOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgICBjYXJ2YWxobw0KRS1NYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

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

谢谢

【问题讨论】:

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

【讨论】:

以上是关于这是啥文本编码?的主要内容,如果未能解决你的问题,请参考以下文章

java存储富文本到啥数据库

这乱码问题怎么解决呢,你问哈哈哈哈哈真的很棒哦,你自己说呢?啥事了?啥问题吗?

C#winform文本框控件程序中不显示( 页面设计中显示),这是啥情况?

unicode汉语翻译是啥意思

错误显示“无法获取样式表 (#) 的文本:未找到具有给定 id 的样式表”,这是啥意思?

请问啥是二进制文件 啥是ASCII 啥是文本文件 它们之间有啥区别