使用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' äé