LoginSignup
7
6

More than 5 years have passed since last update.

CSVの文字化け対策

Posted at

概要

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を編集しみる。
そうすると、それで他の行は問題なく通るということがある。

7
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6