Posted at

CSVの文字化け対策

More than 3 years have passed since last update.


概要

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は、


  • 参考

http://qiita.com/gecko655/items/17d3f6b272e1c4548a6f


セル内に改行がある

ふつうにエクセルで改行を消す関数があるのでそれで消す。

http://officetanaka.net/excel/function/tips/tips09.htm


特定の行だけエラーが出る

どれだけ対策しても、対策しきれない特殊な文字もある(キリル文字とか)。

そういうときは思い切って、エラーが出ている行だけ直接、CSVを編集しみる。

そうすると、それで他の行は問題なく通るということがある。