nkf コマンドで base64 エンコードされた文字列をデコードする

メールの件名をシェルスクリプトだけで処理する必要に迫られたのだけれども、中に BASE64 でエンコードされているものがあって往生した。

$ cat mail
(snip)
Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsJEckIiRrGyhC?=

PHP や Perl を以ってすればデコードも容易いがシェルスクリプトのみを用いるという限定をつけられているのでまったく難航した。思い通りに進捗しないので元染め職人の人へ尋ねると nkf でエンコードができます。死ね。とのあたたかい助言が放たれた。nkf のオンラインマニュアルを見ると

-m[BQSN0]
MIME を解読する。(デフォルト) ISO-2022-JP (B encode) と ISO-8859-1 (Q encode) のみを解読す
る。 ISO-8859-1 (Latin-1) を解読する時は、-l フラグも必要である。 -m0 では MIME を解読しな
い。 -mB, -mQ では、BASE64, Q encode されているものとして処理する。

-mB MIME base64 stream を解読する。ヘッダなどは取り除くこと。

-mQ MIME quoted stream を解読する。

-mS MIME のチェックを厳しくする (デフォルト)

-mN MIME のチェックを緩くする

-m0 MIME を解読しない。

-mS は、宣言の内容と、その後に続く encoded-text の整合性をチェックする。 -mN は、改行で切ら
れた MIME なども解読する。解読が止まらないこともある。

無闇にたくさんのオプションがあるけれども何でもデフォルトで MIME を解読するということである。それで下のように BASE64 エンコードされた文字列を 簡単に nkf コマンドへパイプで渡すと

$ echo "Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsJEckIiRrGyhC?=" | nkf -w
(snip)
Subject: 日本語である

やっと胸の痞えが下りた心持がする。

コメントを残す

メールアドレスが公開されることはありません。


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>