csvファイルを作成すると文字化けする
スクレイピングなんかをしているとデータをCSVに入れたくなりますよね。
でもそこにマルチバイト文字が混ざっているとエクセルで開いた時に文字化けしてしまったという経験があるのではないでしょうか。
bom付きで保存して解決
rubyに標準で入っているcsvライブラリのgenerateを使ってbom付きのCSVを作ってみましょう。
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クラスのオブジェクトができました。
あとはこれをファイルで保存するだけです。
File.open("result.csv","w") do |file|
file.write(csv_file)
end
これでbom付きのresult.csvファイルがヘッダー付きで作成されました。
データを追加する時はこうですね。”w”を”a”にするだけですね。
CSV.open("result.csv","a") do |file|
file << ["かつや", "katsuya@csv.com", "36歳"]
end
これでcsvファイルをエクセルで開いても文字化けしません。
簡単ですね。


コメント