IEではダウンロードファイル名にUTFを使うと文字化けするため、
以下のようにURLエンコードを行うかSJISに変換します。
xxx_controller
file_name = '日本語.csv'
p file_name.encoding # ⇒ #<Encoding:UTF-8>
file_name = ERB::Util.url_encode(file_name)
p file_name.encoding # ⇒ #<Encoding:ASCII-8BIT>
send_data 'a,b,c', # send_fileも同様
filename: file_name,
type: 'text/csv'
FireFoxなどIE以外のブラウザではURLエンコードしたUTFやSJISは文字化けする場合があるので、
IE以外はエンコードさせないようにします。
xxx_controller
file_name = '日本語.csv'
file_name = ERB::Util.url_encode(file_name) if msie?
...
def msie?
(/MSIE/ =~ request.user_agent) || (/Trident/ =~ request.user_agent)
end
ユーザーエージェントに「MSIE」または「Trident」という文字列が存在すれば、IEと判断します。
IE11ではユーザーエージェントから「MSIE」が削除されたので「Trident」と文字列を見て判断するようにしています。
参考
http://anond.hatelabo.jp/20130219210226
http://furoshiki.hatenadiary.jp/entry/2013/11/11/224605