首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确地将mime编码的电子邮件附加名称解码到unicode对象

正确地将mime编码的电子邮件附加名称解码到unicode对象
EN

Stack Overflow用户
提问于 2017-02-08 12:20:46
回答 1查看 40关注 0票数 0

让它简单明了,我有这样的原始字符串,它是一个有汉字的丝虫:

=?utf-8?B?5L+d56iO5LuT5Y+R6LSn5pel5oqlMS4xOS0xLjIxLnhsc3g=?=

根据http://dogmamix.com/MimeHeadersDecoder/,它的解码版本如下所示:

保税仓发货日报1.19-1.21.xlsx (正确)

我试图对其进行解码,以获得以下unicode字符串:

代码语言:javascript
复制
u'保税仓发货日报1.19-1.21.xlsx'

我要做的是:

步骤1:

代码语言:javascript
复制
in_str = '=?utf-8?B?5L+d56iO5LuT5Y+R6LSn5pel5oqlMS4xOS0xLjIxLnhsc3g=?='
from email.header import decode_header
res = decode_header(in_str)

然后res是以下形式的元组列表:

代码语言:javascript
复制
[('\xe4\xbf\x9d\xe7\xa8\x8e\xe4\xbb\x93\xe5\x8f\x91\xe8\xb4\xa7\xe6\x97\xa5\xe6\x8a\xa51.19-1.21.xlsx', 'utf-8')]

什么会产生一个问题--为什么它只是一个字节串,而部分是一个普通的原始字符串('1.19-1.21.xlsx‘是字符串的一个原始部分)?但我们还是继续吧。

第2步。

让我们从utf-8解码这个字节串,因为我相信它是utf-8编码字符串(逻辑,对吗?)

代码语言:javascript
复制
filename = res[0][0].decode('utf-8')

我认为这应该返回以下unicode字符串:

代码语言:javascript
复制
u'保税仓发货日报1.19-1.21.xlsx'

但是我得到了另一个字节串(这次是unicode):

代码语言:javascript
复制
u'\u4fdd\u7a0e\u4ed3\u53d1\u8d27\u65e5\u62a51.19-1.21.xlsx'

这让我抓狂,因为我相信我做的是对的。

顺便说一下,是的,我读过"Unicode“,仍然不知道如何修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 17:40:47

继续您的示例,并使用支持字体字符的IDE:

代码语言:javascript
复制
#!python2
in_str = '=?utf-8?B?5L+d56iO5LuT5Y+R6LSn5pel5oqlMS4xOS0xLjIxLnhsc3g=?='
from email.header import decode_header
res = decode_header(in_str)
for data,enc in res:
    print data.decode(enc)

输出:

代码语言:javascript
复制
保税仓发货日报1.19-1.21.xlsx

在Python 2中,您必须解码和打印字符串才能正确显示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42112980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档