文字化けに立ち向かう

Macを使っていると、Windowsな人から送られてきたCSVを開いたときに文字化けしててツライ、的なことがよくあるので、備忘録的によく使う対処方法をまとめておく。

Vimで立ち向かう

:e文字コードを指定して開き直してやる。

:e ++enc=cp932

このまま編集して保存すると指定した文字コードで保存される。

ちなみに :set enc?Vimの内部で使われる文字コードが、 :set fenc? でファイルの文字コードが確認できる。
注意したいのは、:set fenc? は文字化けしている状態だと fileencoding=latin1 などと表示され、うまく機能しない。
また :set enc? は、先ほどあげた :e で指定した文字コードは関係なく、Vim内部で使われる文字コードが表示される。

いま開いているファイルを別の文字コードに変換したければ :set fenc=cp932 などする。
ただし、文字化けしている状態で変換処理をかけてはいけない。
必ずファイルの文字コードを正しく指定してから開き、変換処理をかける。

下記のようなエラーが出た場合は文字化けしていることが多いので確認する。

E513: write error, conversion failed (make 'fenc' empty to override)

どうしてもこのエラーが取れない場合は :set fenc= とやると解消される。

なお、Vimには文字コード自動判別機能があるので .vimrc に設定すれば適切な文字コードで開いてくれる。

" .vimrc
set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,cp932,utf-8

コマンドで立ち向かう

iconv コマンドを使うことで異なる文字コード間の相互変換ができる。
結果は標準出力なので、ファイルに出力したい場合は -o オプションやリダイレクトを利用する。

$ iconv -f CP932 -t UTF=8 original.csv > converted.csv

パイプを使って grep と組み合わせたりすると便利。

$ iconv -f CP932 -t UTF-8 anime.csv | grep "ドラえもん" | less