Python imap 模块不能解析出中文名字的附件

发布于 2022-08-28 11:21:45 字数 217 浏览 15 评论 0

imap 模块输出的attachment 文件名是

=?gb18030?B?0KzX07HKy6IuanBn?=

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

⊕婉儿 2022-09-04 11:21:45
>>> 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。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文