ダウンロードファイル名の文字化けについて
IE画面上にファイル名がリンク表示されており、
ファイル名のクリックで起動されるDownloadServletを作成しました。
日本語を含むファイル名のダウンロードを行うと、
「ファイルのダウンロード」ダイアログではファイル名がきちんと表示されるのですが、
「ファイルの保存」ダイアログでのファイル名が文字化けしてしまいます。
ダウンロード実施後のファイル名も文字化けのままです。
servletでのレスポンスヘッダの設定は以下のように行っています。
res.setContentType("application/octet-stream; charset=Shift_JIS");
res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
現象が起きている環境はWindows2000Professional, IE6.0で、
WindowsXPなら問題ありませんでした。
例えば「通達.pdf」というファイル名だと、
”通達”という文字列が”騾夐#”と化けます。
多少調べてみたところURLEncoderではUTF-8コードを%+16進数文字に変換するので、
結果が以下のようになります。
%E9%80%9A%E9%81%94.PDF
これをデコード時?にまずUTF-8として読んで、
それからSJIS変換すれば?ちゃんと読めるのかと思うのですが、
どうも「%E9%80%9A%E9%81%94」をそのままSJISコードとしてデコードして
「騾(E980)夐(9AE9)#(8194)」となっている感じです。
ダウンロード処理で出すダイアログはIEに依存しているので
特にデコードなどを自分で行っているわけではないですし、
WindowsXPではちゃんと表示されるなど、
デコード方式がOSに依存?しているような気もするので対処の方法がわかりません。
ダウンロードservletのプログラムの中でどうにか対処できるものなのでしょうか?
わかりにくい質問ですみませんが、ぜひご回答よろしくお願いいたします。
お礼
素早いご返答ありがとうございます! 私もWindows上では大文字、小文字の区別がないことは知っておりました。 こちらではLinuxにファイルを移動することが多いのでWindowsではファイル名に気をつけているつもりです。しかし、XP上ではたしかに小文字として存在しているファイルがMOやCDを介してコピーするとファイルの先頭文字が大文字に変換されてしまいます。これではLinuxのように大文字、小文字の区別があるシステムでは不具合が起こってしまいます。これはXP上の問題だと思うのですが、やはり他の症状なのでしょうか。