Webブラウザによって,マルチバイトファイル名の取り扱いが異なるというのが問題なんだよね
いままでは,http://kingyo-bachi.blogspot.jp/2012/10/railssendfilechrome.html
を参考にして,ファイル名をURLエンコードすることでお茶を濁していたんだ
でもこれだと,Firefoxでファイル名が文字化けすることに気付いてしまった
気づかなければ放置していたんだけどね :P
http://rails.hatenadiary.jp/entry/2013/01/31/104006 を発見
(生sjisと,URLエンコードの違いはもう少ししっかり書いておかないと誤解招かないかな?という当ページへの突っ込みはさておき)
つまりは,基本は日本語ファイル名をUTF-8で扱うぞ,ただしIEだけは例外としてSJISに変換してやるぞ
ということだね
ちょっと気になったので,このあたりのブラウザの対応状況をざっと調べてみたよ
なお調べた日本語ファイル名は「今日の予定.doc」.「予」という漢字が入っているのがポイントね
生utf8 | 生sjis | url_encode(utf8) | url_encode(sjis) | |
chrome(win7-64bit) | ok | x | ok | x |
firefox 18 (win7-64bit) | ok | x | x | x |
IE9(win7-64bit) | x | ok | ok | x |
firefox(MacOS X) | ok | x | x | x |
さらにいろいろ調べてみると,正式にはRFC2231に準拠させるのが正しいみたい
http://fgin.seesaa.net/article/30073826.html によると,
IE6は対応してなかったようだけど,私の中ではIE6はもう絶滅していることになっているので!
Railsのsend_file関数でさ,RFC2231準拠のContent-Disposition表記ができたらいいのにな(チラッチラッ)
もう少し詳しく調べてみたよ http://linux.ohwada.jp/modules/smartsection/item.php?itemid=515 http://0xcc.net/pub/webdb/bk-05.html などのまとめが素晴らしいね 最近のブラウザはほとんどRFC2231に対応しているみた...