概要
RubyでCSVを扱うとき、文字化けなど種々の問題にしばしば遭遇するので、その都度行った対策のまとめ。
項目
- 日本語が文字化けする
- 改行コードがおかしい
- セル内の改行がおかしい
- 特殊な文字によるエラー
内容
日本語が文字化けする
エクセルで作ったcsvは文字コードがShiftJSになっている。
そのCSVをRubyでそのまま読み込むと文字化けしているので、文字コードをUTF-8にする。
逆に、Rubyで生成したCSVをエクセルで開こうとすると文字化けするので、ShiftJSに変換する。
具体的には、nkfコマンドでUTF-8に変換する。
$ nkf -g sample.csv
# 当該ファイルの文字コードを見る
# Shift JS
$ nkf -w --overwrite sample.csv
# UTF-8に変換する
$ nkf -g sample.csv
# UTF-8
nkfコマンドが使えない場合は、
$ brew install nkf
でインストールできる(homebrewを使っている場合)。
- 参考
http://kawatama.net/others/mac/1754
http://linuxserver.jp/linux/nkfでファイルの文字コードと改行コードを変更
http://www.uetyi.com/server-const/command/entry-312.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/
改行コードがおかしい
Rubyやvimで開くと改行コードの
^M
がそのまま文字として出ていることがある。
そういうときはこれを置換する。
具体的には当該csvをvimで開いて、
:%s/^M/^M/g
として置換する。^Mは、
- 参考
セル内に改行がある
ふつうにエクセルで改行を消す関数があるのでそれで消す。
特定の行だけエラーが出る
どれだけ対策しても、対策しきれない特殊な文字もある(キリル文字とか)。
そういうときは思い切って、エラーが出ている行だけ直接、CSVを編集しみる。
そうすると、それで他の行は問題なく通るということがある。