最近用 Python 的 imaplib
和 email
从一个 gmail 信箱中取信。
因为信可能有很多,而我只想取特定发件人发来的信,所以就只先取信头(通过类似 rv, data = self.M.fetch(num, '(BODY[HEADER])')
的方式),如果发件人符合,再取整封信(rv, data = self.M.fetch(num, '(RFC822)')
)。
于是我就遇到了这么样封信。如果我只取信头,那么取到的信件发件人是:
'"\xce\xa2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc5\xb6\xef\xbf\xbd" <weixinteam@qq.com>'
它是乱码:
>>> print '"\xce\xa2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc5\xb6\xef\xbf\xbd" <weixinteam@qq.com>'.decode("gbk")
"微锟斤拷锟脚讹拷" <weixinteam@qq.com>
而如果取整封信,则信件标题是:
'"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <weixinteam@qq.com>'
这个标题则是正常的:
>>> print '"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <weixinteam@qq.com>'.decode("gbk")
"微信团队" <weixinteam@qq.com>
这个乱码,可以这么重现……
把这个字串直接(应该是用 utf-8 解码)印到控制台里,然后把输出的内容再用 utf-8 编码一遍,就变成了那第一串长字符串;特别地,\xef\xbf\xbd
其实就是 utf-8 编码的“问号标志”�
>>> print '"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <weixinteam@qq.com>'
"���Ŷ�" <weixinteam@qq.com>
>>> '"���Ŷ�" <weixinteam@qq.com>'
'"\xce\xa2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc5\xb6\xef\xbf\xbd" <weixinteam@qq.com>'
不知大家遇到过一样的情况吗?
p.s. 如果搜索“锟斤拷锟解”,还能得到更壮观的结果…比如这个…锟斤拷锟解:圣锟斤拷锟斤拷锟斤拷没锟叫达拷锟斤拷锟斤拷锟斤拷矛锟杰和诧拷锟届?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.