65
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

背景

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 の形式を指定します。

65
61
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?