Python imap 模块不能解析出中文名字的附件
imap 模块输出的attachment 文件名是
=?gb18030?B?0KzX07HKy6IuanBn?=
然后用 email 模块解析的文件名字 得出的结果也是
=?gb18030?B?0KzX07HKy6IuanBn?=
我的上传到邮箱的是中文文件名
很显然 这个字符串是 gb18030编码; 问题是 怎样解析出对应的中文文件名呢?
秋水
11 years, 1 month ago
Answers
>>> 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。
黑锅218
answered 11 years, 1 month ago