それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nkf コマンドの使い方を応用して,メールタイトルをデコードする

NKF でメールヘッダをデコードしたり出来るんですよ。

メールのタイトル(subject)をデコード

echo  'Subject: [kof2011pc:00187] =?ISO-2022-JP?B?GyRCNGsyaCVWITwlOUpnGyhC?==?ISO-2022-JP?B?GyRCPTgkTjlwQ04lYSE8GyhC?==?ISO-2022-JP?B?GyRCJWsbKEI=?=' | nkf -w -

でデコード出来ます

注意点 MIMEを使うときに

subject中の =?XXXXXXXXXXX ?= の区切り文字が無いとデコードできないよ


Subjectなどのiso-2022-jpのヘッダって普段ライブラリ任せなので、いざ調べようとすると,一行調べるために,メール全体をデコードするライブラリを持ち出してきて不便だったり。

エンコードはこんな感じ

takuya@letsnote:~$ echo これはテスト | nkf -jM
=?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIGyhC?=

nkf の変換オプション

デコードで使った

-w
UTF-8に変換して出力

エンコードで使った

-M
Base64エンコード
-j
iso-2022-jp エンコード

です。

takuya@debian00:~$ nkf --help

USAGE:  nkf(nkf32,wnkf,nkf2) -[flags] [in file] .. [out file for -O flag]
Flags:
b,u      Output is buffered (DEFAULT),Output is unbuffered
j,s,e,w  Outout code is JIS 7 bit (DEFAULT), Shift JIS, EUC-JP, UTF-8N
         After 'w' you can add more options. -w[ 8 [0], 16 [[BL] [0]] ]
J,S,E,W  Input assumption is JIS 7 bit , Shift JIS, EUC-JP, UTF-8
         After 'W' you can add more options. -W[ 8, 16 [BL] ]
t        no conversion
i[@B]    Specify the Esc Seq for JIS X 0208-1978/83 (DEFAULT B)
o[BJH]   Specify the Esc Seq for ASCII/Roman        (DEFAULT B)
r        {de/en}crypt ROT13/47
h        1 katakana->hiragana, 2 hiragana->katakana, 3 both
v        Show this usage. V: show version
m[BQN0]  MIME decode [B:base64,Q:quoted,N:non-strict,0:no decode]
M[BQ]    MIME encode [B:base64 Q:quoted]
l        ISO8859-1 (Latin-1) support
f/F      Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl
Z[0-3]   Convert X0208 alphabet to ASCII
         1: Kankaku to 1 space  2: to 2 spaces  3: Convert to HTML Entity
X,x      Assume X0201 kana in MS-Kanji, -x preserves X0201
B[0-2]   Broken input  0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL
O        Output to File (DEFAULT 'nkf.out')
I        Convert non ISO-2022-JP charactor to GETA
d,c      Convert line breaks  -d: LF  -c: CRLF
-L[uwm]  line mode u:LF w:CRLF m:CR (DEFAULT noconversion)

Long name options
 --ic=<input codeset>  --oc=<output codeset>
                   Specify the input or output codeset
 --fj  --unix --mac  --windows
 --jis  --euc  --sjis  --utf8  --utf16  --mime  --base64
                   Convert for the system or code
 --hiragana  --katakana  --katakana-hiragana
                   To Hiragana/Katakana Conversion
 --prefix=         Insert escape before troublesome characters of Shift_JIS
 --cap-input, --url-input  Convert hex after ':' or '%'
 --numchar-input   Convert Unicode Character Reference
 --fb-{skip, html, xml, perl, java, subchar}
                   Specify how nkf handles unassigned characters
 --in-place[=SUFFIX]  --overwrite[=SUFFIX]
                   Overwrite original listed files by filtered result
                   --overwrite preserves timestamp of original files
 -g  --guess       Guess the input code
 --help  --version Show this help/the version
                   For more information, see also man nkf

Network Kanji Filter Version 2.0.7 (2006-06-13)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW