JISエンコードの入力

JISエンコードの入力なんてしないもので、面倒だったのでメモ。普段はja_JP.UTF-8な環境に生活しているのです。例えば、日付をdateコマンドで実行します。

$ date
2009年  3月  3日 火曜日 23:58:52 JST

コンソールにはようされますな。これをカーソルでコピーして、viなどで貼り付けると、UTF-8になってしまいます。出力をリダイレクトしたファイルをfileコマンドで見ると分かります。

$ date > hoge
$ more hoge
2009年  3月  4日 水曜日 00:01:09 JST
$ file hoge
hoge: UTF-8 Unicode text

じゃあ、これをiconvで変換してみます。

$ date | iconv -f utf8 -t ISO2022JP
2009年  3月  4日 水曜日 00:03:10 JST

コンソールじゃわかりません。同様にリダイレクトしてみます。

$ date | iconv -f utf8 -t ISO2022JP > fuga
$ more fuga
2009年  3月  4日 水曜日 00:03:52 JST
$ file fuga
fuga: ASCII text, with escape sequences

viで開いてみるとさらに一目瞭然です。

2009年  3月  4日 水曜日 00:04:49 JST
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"hoge" 1 line, 43 characters
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"fuga" 1 line, 61 characters

じゃあ、このエスケープされたviの画面をコピペするとどうなるか、というと、エスケープシーケンスが効かなくなってしまいました。

$ cat fuga
2009年  3月  4日 水曜日 00:03:52 JST
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST
$ file fuga
fuga: ASCII text, with escape sequences

じゃあ、他のファイルにこの文字列をコピペさせるには?ということで、リダイレクトすると出来るわけです。

2009年  3月  4日 水曜日 00:04:49 JST
2009^[$BG/^[(B  3^[$B7n^[(B  4^[$BF|^[(B ^[$B?eMKF|^[(B 00:03:52 JST

~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"hoge" 3 lines, 105 characters

面倒だなぁ。もっと楽にやる方法はないだろうかねぇ。