最近用 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" <[email protected]>'
它是乱码:
>>> print '"\xce\xa2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc5\xb6\xef\xbf\xbd" <[email protected]>'.decode("gbk")
"微锟斤拷锟脚讹拷" <[email protected]>
而如果取整封信,则信件标题是:
'"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <[email protected]>'
这个标题则是正常的:
>>> print '"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <[email protected]>'.decode("gbk")
"微信团队" <[email protected]>
这个乱码,可以这么重现……
把这个字串直接(应该是用 utf-8 解码)印到控制台里,然后把输出的内容再用 utf-8 编码一遍,就变成了那第一串长字符串;特别地,\xef\xbf\xbd
其实就是 utf-8 编码的“问号标志”�
>>> print '"\xce\xa2\xd0\xc5\xcd\xc5\xb6\xd3" <[email protected]>'
"���Ŷ�" <[email protected]>
>>> '"���Ŷ�" <[email protected]>'
'"\xce\xa2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc5\xb6\xef\xbf\xbd" <[email protected]>'
不知大家遇到过一样的情况吗?
p.s. 如果搜索“锟斤拷锟解”,还能得到更壮观的结果…比如这个…锟斤拷锟解:圣锟斤拷锟斤拷锟斤拷没锟叫达拷锟斤拷锟斤拷锟斤拷矛锟杰和诧拷锟届?
1
18600491593 2016-06-03 14:24:32 +08:00
头是不是加密了
|
2
quadpixels OP @18600491593 应该没有吧,如果加密了的话,不应该能看到发件人的邮件地址的
|
3
knightdf 2016-06-03 14:47:20 +08:00
http://tools.ietf.org/html/rfc3501.html#section-6.4.5 我原来做过很多,现在忘了,我记得每个邮件提供商都有点不一样,当时有个指令 Gmail 和 qq 之类的就不一样,要自己试
|
4
cxe2v 2016-06-03 14:53:33 +08:00
看到"锟斤拷锟解"这种字符莫名就要笑
|