先日、半角スペースの文字化け問題を取り上げましたが、
今度はIEで、『長いファイル名を持つファイルをダウンロードすると、ファイル名が最後の15文字程度しか残らない』という問題が発生。
(ただし環境による模様。僕のマシンでは発生しました)
調べてみると、どうやらIEはContent-Dispositionの値としてせいぜい200バイト程度しか許容していないらしい。
コチラがかなり参考になりました。
で、この問題に対するMicrosoftの回答は、
「長いファイル名を使わなきゃいいだけじゃね?」
... orz
自分で使うシステムならともかく、お客様に納入するシステムでは、そういう仕様を理解してもらうことは難しいんですよねぇ。
解決策
で、もう少し調べてみると、どうやらIEはContent-Dispositionの値として
Shift_JISエンコーディングされたものも許容するとのこと。
(というか、むしろコチラが正式な仕様らしい)
ファイル名をShift_JISでエンコードすれば、URLエンコーディングするより、かなりコンパクトになります。
Javaで書くとこんな感じ。
HttpServletResponse res = ...; String longFileName = ... String sjisEncodedLongFileName = new String(longFileName.getBytes("Windows-31J"), "ISO-8859-1"); res.addHeader("Content-Disposition", "attachment; filename=" + sjisEncodedLongFileName);
これで、おおよそ50〜60文字程度までのファイル名でもOKです。
それ以上だと…「そんなに長いファイル名を使わなきゃいいだけじゃね?」