Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

背景

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

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

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

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

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

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

インストール

mac の場合

$ brew install nkf

エンコーディングの変換

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

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

MIMEエンコード


UTF8文字列 → MIME エンコード

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

$ echo ほげほげ | nkf -M
=?UTF-8?B?44G744GS44G744GS?=

$ echo ほげほげ | nkf -MB
44G744GS44G744GSCg==

$ echo ほげほげ | nkf -MQ
=E3=81=BB=E3=81=92=E3=81=BB=E3=81=92

解説

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

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

次に、出力のエンコーディングをJISでMIMEエンコードします。
上で説明した通り、nkf -j オプションを加えるだけで簡単に実現出来ます。

$ echo ほげほげ | nkf -jM
=?ISO-2022-JP?B?GyRCJFskMiRbJDIbKEI=?=

$ echo ほげほげ | nkf -jMB
GyRCJFskMiRbJDIbKEIK

$ echo ほげほげ | nkf -jMQ
=1B=24B=24=5B=242=24=5B=242=1B=28B

MIMEデコード

$ echo "=?ISO-2022-JP?B?GyRCJFskMiRbJDIbKEI=?=" | nkf -w
ほげほげ

$ echo GyRCJFskMiRbJDIbKEI= | nkf -wmB  
ほげほげ

$ echo "=1B=24B=24=5B=242=24=5B=242=1B=28B" | nkf -wmQ
ほげほげ

解説

nkf -m: MIME デコードする

入力が「=?charset?encoding?encoded-text=?=」の形式の場合、-m オプションなしでも自動でMIMEデコードしてくれます。便利ですね!
入力が encoded-text だけの場合、明示的に -m オプションと content-transfer-encoding の形式を指定します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした