V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
quadpixels
V2EX  ›  Python

用 imaplib 只取信件头会取到乱码,取整封信则正常

  •  
  •   quadpixels ·
    quadpixels · 2016-06-03 14:09:40 +08:00 · 4261 次点击
    这是一个创建于 3093 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 Python 的 imaplibemail 从一个 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. 如果搜索“锟斤拷锟解”,还能得到更壮观的结果…比如这个…锟斤拷锟解:圣锟斤拷锟斤拷锟斤拷没锟叫达拷锟斤拷锟斤拷锟斤拷矛锟杰和诧拷锟届?

    4 条回复    2016-06-03 14:53:33 +08:00
    18600491593
        1
    18600491593  
       2016-06-03 14:24:32 +08:00
    头是不是加密了
    quadpixels
        2
    quadpixels  
    OP
       2016-06-03 14:36:03 +08:00 via Android
    @18600491593 应该没有吧,如果加密了的话,不应该能看到发件人的邮件地址的
    knightdf
        3
    knightdf  
       2016-06-03 14:47:20 +08:00
    http://tools.ietf.org/html/rfc3501.html#section-6.4.5 我原来做过很多,现在忘了,我记得每个邮件提供商都有点不一样,当时有个指令 Gmail 和 qq 之类的就不一样,要自己试
    cxe2v
        4
    cxe2v  
       2016-06-03 14:53:33 +08:00
    看到"锟斤拷锟解"这种字符莫名就要笑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.