CSVを作成する時にbom付きで保存して文字化けを解決!
csvファイルを作成すると文字化けする
スクレイピングなんかをしているとデータをCSVに入れたくなりますよね。
でもそこにマルチバイト文字が混ざっているとエクセルで開いた時に文字化けしてしまったという経験があるのではないでしょうか。
bom付きで保存して解決
rubyに標準で入っているcsvライブラリのgenerateを使ってbom付きのCSVを作ってみましょう。
1 2 3 4 5 6 7 8 9 |
require 'csv' # bomを作成 bom = %w(EF BB BF).map { |e| e.hex.chr }.join # generateで引数にbomを渡してあげる csv_file = CSV.generate(bom) do |csv| csv << ["名前", "メールアドレス", "年齢"] end |
これでcsv_fileというCSVクラスのオブジェクトができました。
あとはこれをファイルで保存するだけです。
1 2 3 |
File.open("result.csv","w") do |file| file.write(csv_file) end |
これでbom付きのresult.csvファイルがヘッダー付きで作成されました。
データを追加する時はこうですね。”w”を”a”にするだけですね。
1 2 3 |
CSV.open("result.csv","a") do |file| file << ["かつや", "katsuya@csv.com", "36歳"] end |
これでcsvファイルをエクセルで開いても文字化けしません。
簡単ですね。