2014年12月3日水曜日

railsでcsvダウンロードできるようにしたらexcelで文字化けした件

データをcsvでダウンロードしたいって要望があったので、
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 件のコメント:

コメントを投稿