2016年2月7日日曜日

linuxで文字コードを変換して表示する

みなさん、こんにちは。


俺のところの自宅メールサーバーは、Linuxで運営しています。
普段メンテナンスはTeratermで接続して行っているのですが、全角文字はUTF-8で処理されています。

今回、メールの中身を確認する必要がでてきたのでTeratermで内容の確認を行うのですが、メールの場合、送信者の環境次第で、どの文字コードが使用さえるかわかりません。
UTF-8で送信してくれるなら問題なく表示できますが、それ以外だと文字化けしてしまいます。


そこで、nkfコマンドを使用して文字コード判別、変換を行って表示します。

debian:/home/hoge/Maildir/cur# cat 1454851827.V301I307c2M657451.debian:2,S | nkf -g
ISO-2022-JP

1454851827.V301I307c2M657451.debian:2,Sが、メールのファイルになります。
catコマンドの出力をnkfコマンドにわたして文字コードの判別を行います。

今回のメールはISO-2022-JPと判明しました。
TeratermではUTF-8を使用しているので、そのままでは文字化けしてしまいます。


UTF-8に文字コードを変換して表示します。

debian:/home/hoge/Maildir/cur# cat 1454851827.V301I307c2M657451.debian:2,S | nkf -w
・・・・・・省略・・・・・・
Subject: 送信テスト
Date: Sun, 7 Feb 2016 22:30:32 +0900
MIME-Version: 1.0
Content-Type: text/plain;
        format=flowed;
        charset="iso-2022-jp";
        reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Mailer: Microsoft Windows Live Mail 15.4.3555.308
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308
送信テスト

文字化けすることなく表示されました。


文字コードを変換しないでISO-2022-JPのまま表示すると以下のように文字化けします。

debian:/home/hoge/Maildir/cur# cat 1454851827.V301I307c2M657451.debian:2,S
・・・・・・省略・・・・・・
Subject: =?iso-2022-jp?B?GyRCQXc/LiVGJTklSBsoQg==?=
Date: Sun, 7 Feb 2016 22:30:32 +0900
MIME-Version: 1.0
Content-Type: text/plain;
        format=flowed;
        charset="iso-2022-jp";
        reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Mailer: Microsoft Windows Live Mail 15.4.3555.308
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3555.308
Aw?.%F%9%H

文字化けして内容が確認できません。


nkfコマンドの主なオプションは以下となります。

-j ISO-2022-JPに出力
-s Shift-JISに出力
-e EUC-JPに出力
-w UTF-8に出力

-g 文字コード判定

-Lu 改行コードをLFに変換
-Lw 改行コードをCR+LFに変換
-Lm 改行コードをCRに変換


使い方は

cat ファイル名 | nkf (-option)
または
nkf (-option) ファイル名

なので、

debian:/home/hoge/Maildir/cur# nkf -w 1454851827.V301I307c2M657451.debian:2,S

としても同じです。


ではでは~☆ミ

0 件のコメント:

コメントを投稿