使用 Python 编码和解码 MIME quoted-printable 数据


很多时候我们都需要处理的数据并不总是包含常规 ASCII 字符。例如,一封用非英语撰写的电子邮件。Python 有一个基于 MIME(多用途互联网邮件扩展)的模块,可以用它来处理此类字符。在本文中,我们将了解如何解码电子邮件或其他一些直接输入中的此类字符。

使用 email 包

email 包包含 mime 和 charset 模块,它们可以执行编码和解码工作,如下例所示。我们获取了一封包含 Unicode 字符的电子邮件,然后将其编码为 utf-8。

示例

import email.mime, email.mime.nonmultipart, email.charset
msg=email.mime.nonmultipart.MIMENonMultipart('text', 'plain', charset='utf-8')

#Construct a new charset
cs=email.charset.Charset('utf-8')
cs.body_encoding = email.charset.QP

# Set the content using the new charset
msg.set_payload(u'This is the text containing ünicöde', charset=cs)
print(msg)

运行以上代码后,会得到以下结果 -

输出

Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

This is the text containing =C3=BCnic=C3=B6de

使用 quopri

此 python 模块可以进行 quoted-printable 传输编码和解码。quoted-printable 编码专为不包含过多的不可打印字符的数据而设计。在以下示例中,我们将看到如何对含有非常规 ASCII 字符的字符串进行编码和解码。

示例

import quopri
str1 = 'äé'
#encoded = quopri.encodestring('äé'.encode('utf-8'))
encoded = quopri.encodestring(str1.encode('utf-8'))
print(encoded)

str2 = '=C3=A4=C3=A9'
decoded_string = quopri.decodestring(str2)
print(decoded_string.decode('utf-8'))

运行以上代码后,会得到以下结果 -

输出

b'=C3=A4=C3=A9'
äé

更新于: 2020-12-28

2K+ 浏览量

开启你的 职业生涯

完成课程获得认证

开始
广告