railsでcsvダウンロード機能を作ったら、excelで開いたら文字化けするって言われた時の対応です。
バージョンは以下で試しました。
ruby 2.1.2
rails 4.1.5
まず最初に書いたcsvダウンロード部分を抜粋。
ローカルにファイルを出力して、それをsend_fileで返す形です。
filename = '/tmp/test.csv'
line = ['aa','bb','cc']
open(filename,"w"){|f|
f.puts(line.join(','))
}
stat = File.stat(filename)
send_file(filename, :filename => 'test.csv', :length => stat.size)
この形だとファイルの文字コードがUTF-8になります。UTF-8だとexcelで開いた時には文字化けしました。
(Libre Officeだと最初にencodeをどれにするか聞かれたので、UTF-8にすれば問題なく開けました。)
最初の処理から文字コードを変えた形。
filename = '/tmp/test.csv'
line = ['aa','bb','cc']
open(filename,"w:cp932"){|f|
f.puts(line.join(','))
}
stat = File.stat(filename)
send_file(filename, :filename => 'test.csv', :length => stat.size)
ローカルにファイルを出力するタイミングで文字コードの指定を「cp932」にしてあげると、
文字化けせずにexcelで開けるようになりました。
macのexcelでもUTF-8だと文字化けしたのが、excelがっかりだなぁと思ったりした次第です。
参考URL
http://tmtms.hatenablog.com/entry/20120812/ruby_encoding
0 件のコメント:
コメントを投稿