PythonでMIME quoted-printableデータをエンコード・デコードする方法
メールやテキストデータを扱っていると、必ずしも通常のASCII文字だけではないデータに遭遇することがあります。例えば、英語以外の言語で書かれたメールがその代表例です。Pythonには、こうした特殊な文字を扱うための仕組みとして、MIME(Multipurpose Internet Mail Extensions)に基づいたモジュールが用意されています。本記事では、メール本文や単純な文字列入力に含まれるそうした文字を、エンコード・デコードする方法を解説します。
emailパッケージを使用する方法
Python標準ライブラリのemailパッケージには、mimeモジュールとcharsetモジュールが含まれており、これらを組み合わせることでquoted-printable形式のエンコード・デコード処理を実現できます。
以下の例では、Unicode文字を含むメールメッセージを作成し、UTF-8でエンコードしています。まず新しいcharsetオブジェクトを構築し、ボディのエンコーディング方式としてQP(quoted-printable)を指定している点に注目してください。
サンプルコード
import email.mime, email.mime.nonmultipart, email.charset
msg=email.mime.nonmultipart.MIMENonMultipart('text', 'plain', charset='utf-8')
# 新しいcharsetを構築
cs=email.charset.Charset('utf-8')
cs.body_encoding = email.charset.QP
# 構築した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
出力を見ると、「ü」が「=C3=BC」、「ö」が「=C3=B6」としてエンコードされていることがわかります。これはUTF-8でのバイト列をquoted-printable形式で表現したものです。
quopriモジュールを使用する方法
quopriは、quoted-printable形式の転送エンコードおよびデコードを行うためのPython標準モジュールです。quoted-printableエンコーディングは、印字不可能な文字が比較的少ないデータ向けに設計されており、ASCII文字はそのまま残しつつ、特殊な文字だけを「=XX」形式に変換します。
次の例では、ASCII以外の文字を含む文字列をエンコードし、さらにデコードして元に戻す一連の流れを確認できます。
サンプルコード
import quopri
str1 = 'äé'
# 文字列をUTF-8でバイト化してからエンコード
encoded = quopri.encodestring(str1.encode('utf-8'))
print(encoded)
str2 = '=C3=A4=C3=A9'
decoded_string = quopri.decodestring(str2)
# デコード結果をUTF-8で文字列に戻す
print(decoded_string.decode('utf-8'))
上記のコードを実行すると、次のような結果が出力されます。
実行結果
b'=C3=A4=C3=A9' äé
このように、encodestring()でエンコードした結果はバイト列として返され、decodestring()に渡すことで元の文字列を復元できます。デコード後のバイト列はdecode('utf-8')を呼び出すことで、人間が読める文字列に変換できる点も覚えておくと便利です。
まとめ
Pythonでquoted-printable形式のデータを扱う場合、メールメッセージ全体を構築するならemailパッケージ、単純な文字列のエンコード・デコードならquopriモジュールが適しています。用途に応じて使い分けることで、多言語対応のメール処理などを効率的に実装できます。
-
Pythonによるデータ分析と可視化入門|pandasの基本を徹底解説
Pythonによるデータ分析と可視化の概要 Pythonには、データ分析と可視化のための強力なライブラリが数多く用意されています。代表的なものとしては、NumPy、pandas、matplotlib、seabornなどが挙げられます。本記事では、その中でも中心的な役割を果たすpandasについて詳しく解説します。pandasはNumPyをベースに構築されたオープンソースライブラリで、高速なデータ分析やデータのクリーニング・前処理を効率的に行えます。さらに、pandas自体にも便利な可視化機能が組み込まれています。 pandasのインストール方法 pandasをインストールするには、ターミナル
-
Pythonのbase64モジュールを使ったデータエンコード・デコード入門
PythonにおけるBase64エンコーディングとはPython標準ライブラリのbase64モジュールは、バイナリデータをプレーンテキスト(ASCII)プロトコルで安全に送信できる形式へ変換するための機能を提供します。メール送信、URLへの埋め込み、HTTP POSTリクエストなど、テキストベースの通信経路でバイナリデータを扱いたい場面で活躍するモジュールです。このモジュールが実装しているのは、RFC 3548で定義されたBase16、Base32、Base64の各アルゴリズム、および事実上の標準となっているAscii85とBase85のエンコーディングです。RFC 3548準拠のエンコーディ