コマンドラインでMIMEヘッダーをエンコード&デコードする方法

背景

MIME(マイム)とはインターネットの電子メールで様々なフォーマットを扱えるようにする規格のことです。MIMEによって電子メールにPDF、画像、動画など様々なドキュメントを添付することができます。

しかし、本来電子メールはUS-ASCIIしか使用できないため、メールのヘッダー部分にマルチバイト文字をそのまま入れることはできません。そのため、現在の電子メールでは以下のような形式でエンコードして、ヘッダーに格納しています。

=?charset?encoding?encoded-text=?=

そこで、このようなフォーマットの文字列をコマンドラインでエンコード、デコードする方法について書いていきます。

こういうときに、nkf コマンドが大活躍します。

なお、MIME の説明については端折るのであしからず。

インストール

mac の場合

文字エンコーディングの変換

MIMEの前に文字エンコーディングの変換について

  • nkf -w: UTF-8 に変換
  • nkf -e: EUC-JP に変換
  • nkf -s: Shift-JIS に変換
  • nkf -j: JIS(ISO-2022-JP) に変換

MIMEエンコード


MIME エンコードは「普通の文字列」を「=?charset?encoding?encoded-text=?=」のような形式の文字列に変換する操作のことです。

UTF8文字列 → MIME エンコード

「ほげほげ」は UTF8 文字列として、UTF8のままMIMEエンコードするとします。

解説

  • nkf -M: Base64 で MIMEエンコードする
  • nkf -MB: Base64 で MIMEエンコードする
    • encoded text だけ取り出す
  • nkf -MQ: quoted-printable で MIMEエンコードする
    • encoded text だけ取り出す

UTF8文字列 → MIME エンコード(JIS)

次に、出力のエンコーディングをJISでMIMEエンコードします。 JIS(ISO-2022-JP) は 7bit で表現される文字セットを使用しており、メールのエンコーディング形式として今でもよく使われています。

JIS への変換は、上で説明した通り、nkf -j オプションを加えるだけで簡単に実現出来ます。

MIMEデコード

MIME デコードは「=?charset?encoding?encoded-text=?=」のような形式の文字列を「普通の文字列」に変換する操作のことです。

解説

nkf -m: MIME デコードする

入力が「=?charset?encoding?encoded-text=?=」の形式の場合、-m オプションなしでも自動でMIMEデコードしてくれます。便利ですね!

入力が encoded-text だけの場合、明示的に -m オプションと content-transfer-encoding の形式を指定します。

まとめ

nkf コマンドを使って、MIMEエンコード&デコードしました。 簡単ですね!

参考図書

Leave a Reply

Your email address will not be published. Required fields are marked *