dポイントプレゼントキャンペーン実施中!

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のプログラムの中でどうにか対処できるものなのでしょうか?

わかりにくい質問ですみませんが、ぜひご回答よろしくお願いいたします。

A 回答 (1件)

参考URLのページにあるとおり、Content-Dispositionヘッダは、Shift_JIS以外だと文字化けします。


迷惑な仕様ですね・・・。

私の場合は、User-Agentで判断して
res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "MS932"));
として回避しています。

参考URL:http://support.microsoft.com/default.aspx?scid=k …

この回答への補足

回答でお名前を間違えてしまってすみません。
s2tさんでst2さんではないですよね・・・。
ほんとにすみません。

補足日時:2004/12/11 01:11
    • good
    • 0
この回答へのお礼

st2さん回答ありがとうございます。

本日はすでに自宅に帰ってきてしまっており、試験環境がないので確認できないのですが、解決できそうな糸口を教えていただけただけでも大変助かりました。

ぜひ試してみます。状況についてはまたお返事させて頂きますね。

お礼日時:2004/12/11 01:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!