Thường gặp dữ liệu chứa ký tự non-ASCII (email tiếng Việt, v.v.). Python hỗ trợ qua module MIME (Multipurpose Internet Mail Extensions). Bài viết demo encode/decode ký tự đặc biệt.
Sử dụng package email
Module email.mime và email.charset thực hiện encode/decode. Ví dụ: email chứa Unicode, encode sang utf-8 quoted-printable.
Ví dụ
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 \u00fcnic\u00f6de', charset=cs)
print(msg)
Kết quả:
Đầu ra
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
Sử dụng quopri
Module quopri thực hiện quoted-printable transport encoding/decoding. Dành cho dữ liệu ít ký tự non-printable.
Ví dụ
import quopri
str1 = '\u00e4\u00e9'
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'))
Kết quả:
Đầu ra
b'=C3=A4=C3=A9' äé