玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python imap模块应该如何解析出中文名字附件

imap 模块输出的attachment 文件名是

=?gb18030?B?0KzX07HKy6IuanBn?=

然后用 email 模块解析的文件名字 得出的结果也是
=?gb18030?B?0KzX07HKy6IuanBn?=

我的上传到邮箱的是中文文件名

很显然 这个字符串是 gb18030编码; 问题是 怎样解析出对应的中文文件名呢?

>>> import email.header
>>> email.header.decode_header('=?gb18030?B?0KzX07HKy6IuanBn?=')
[(b'\xd0\xac\xd7\xd3\xb1\xca\xcb\xa2.jpg', 'gb18030')]
>>> b, e = _[0]
>>> b.decode(e)
'鞋子笔刷.jpg'

# 赠送
import re
from email import header

def decode_multiline_header(s):
  ret = []

  for b, e in header.decode_header(re.sub(r'\n\s+', ' ', s)):
    if e:
      if e.lower() == 'gb2312':
        e = 'gb18030'
      b = b.decode(e)
    elif isinstance(b, bytes):
      b = b.decode('ascii')
    ret.append(b)

  return ''.join(ret)

不建议自己解码邮件头,除非你阅读过相关 RFC。这编码看上去简单,但其实有不少坑,比如上边那个解码多行头信息的,比如这里编码可以不用 base64 而使用 quoted-printable。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19810.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月15日 - 10时38分02秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules