ターミナルで SJIS の文字化けを避ける

  • 17
    いいね
  • 0
    コメント

手短に言うと

cat 'hoge.csv' で文字化けするならば下記のコマンドを試す。

iconv -f SJIS 'hoge.csv'

「位置 **** で不正な入力シーケンスがありました」が出るならば windows の拡張文字コードセットになっていることがあるので、下記を試す。

iconv -f cp932 'hoge.csv'

~/.bashrc 等のシェル起動時のスクリプトの中にエイリアスを定義しておくと楽できる。

alias sjis="iconv -f cp932"

長々と話すと

CSV ファイルの様子を見るときに head とか tail とか cat とかしていると、 SJIS のファイルが文字化けして吐きそうになることがあります。そういう時には nkficonv を使うとなんとかなることが多いです。

nkf は Network Kanji Filter の略だそうです。大昔に日本語のメールを送る時に変換するために生まれたコマンドらしいです。こちらは、インストールされてないことが多いので下の iconv が良いかもしれません。たぶん nkf hoge.csv のように引数なしでも動くはずです。引数を設定すれば好きな文字コード・改行コードに変換できます。詳細はヘルプを見たほうが良いです。

iconv は International Codeset Conversion Library の略で、わりと一般的な文字コード変換ライブラリのようです。I convert で覚えるといいかもしれません。あるいは、アイコンブとか。 iconv -f SJIS hoge.csv のようにして使います。nkf と同じく、他の文字コードにも変換できます。ヘルプを見ればわかりますが iconv -l で扱うことの出来るすべての文字コードが出てきます。

ある Shift JIS のファイルを iconv -f SJIS で読んだ場合に「位置 **** で不正な入力シーケンスがありました」というようなメッセージが出ました。確認してみると「﨑」の文字で「たつさき」とか呼ばれている文字でした。どうやら windows でこの文字を使用した場合、通常の Shift JIS の枠から外れ CP932 と呼ばれる windows 独自の文字コードセットになるようです。なので iconv -f CP932 で読んでみると、うまく表示できました。

ちなみに csv ファイルを直接 catless で見ると形が崩れて見づらいので、

column -s, -t hoge.csv | less -S

のようにすると、見やすく表示することが出来ます。