ちょっと前にコチラで説明したお話。
http://d.hatena.ne.jp/takahashikzn/20100824/
最近コメント頂いたのですが、ファイル名を生のShift_JISデータでContent-Dispositionに入れる場合、『半角スペースが"_"に変わる』とのこと。
で、たった今調べてみたのですが、確かにそうなります。
おっかしいなぁ…当時はちゃんと検証したつもりだったんだけど。
IE8, Firefox3.6, Chrome7でそれぞれ、
"Content-Disposition; filename=???"に何を入れたらどうなるかを調査してみました。
※ "URLのファイル名+拡張子"になります。例えばダウンロードのURLが"/aaa/bbb/ccc"ならばファイル名は"ccc.txt"です。予想ですが拡張子はMIMEタイプを判定して自動的に付けているのではないかと。
上記の結果を見るに、どうやらIEだけが悪い子みたいです。
filenameの値に生Shift-JISデータを入れていたとしても、半角スペースは半角スペースのまま入っている。
だからこれ以上手の打ちようがないと思うんだけどなぁ。
今のところの結論
IEで、何としてでも半角スペースを含むファイル名でダウンロードさせたい場合、
- ファイル名をUTF-8でURLエンコードしたものを指定(URLEncoder.encodeを使う)
- ただし、長いファイル名が途中で切れてしまうことになる。
- 半角スペースが"_"になるのは仕様。あきらめる。(←僕はこっちを選びましたw)