使用Python编码和解码MIME引用可打印数据

很多时候,我们需要处理不总是具有常规ASCII字符的数据。例如,使用英语以外的其他语言的电子邮件。Python具有通过使用基于MIME(多用途Internet邮件扩展)的模块来处理此类字符的机制。在本文中,我们将看到如何在电子邮件或其他直接输入中解码此类字符。

使用电子邮件套餐

电子邮件软件包具有mime和charset模块,它们可以执行编码和解码工作,如下例所示。我们已接收了包含Unicode字符的电子邮件,然后将其编码为utf-8。

示例

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

#构造一个新的字符集
cs=email.charset.Charset('utf-8')
cs.body_encoding = email.charset.QP

# 使用新的字符集设置内容
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模块执行带引号的可打印传输编码和解码。带引号的可打印编码是为不可打印字符相对较少的数据而设计的。在下面的示例中,我们看到了如何使用非常规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'
äé