
前提
Servletを使用してChromeでファイルをダウンロードした所ファイル名の全角空白がデコードされていませんでした。
IEでは正常にダウンロードされます。
全 角 空 白.zip → 全E3%80%80角E3%80%80空E3%80%80白.zip といった様にダウンロードされました。
ソース内でファイル名をUTF-8でURLエンコードし、それをContent-Disposition
ヘッダのfilename*=
に引数で渡しています。
該当のソースコード
Java
String fileName = URLEncoder.encode("ファイル名", "UTF-8"). response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + fileName);
試したこと
String fileName = new String("ファイル名".getBytes("UTF-8"),"ISO-8859-1") response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
質問したい事
ファイル名をUTF-8でエンコードし、ISO-8859-1でデコードしたファイル名をfilename
引数で渡した所Chromeではファイル名が正常のままダウンロードされました。しかし、IEではファイル名が文字化けされてダウンロードされてしまいます。
解決策としてはブラウザ判定の処理を追加してChromeとIEで別々に処理を行わせる事で解決致しました。
ですが、何故このような事が起こるのかがわからないので質問させてください。
- 元のコードでは
filename*=
で文字コードをUTF-8に指定してダウンロードを行っています。
それなのに何故全角空白がデコードされずにダウンロードされてしまうのでしょうか?
- 試したことのコードではファイル名をUTF-8でエンコードし、ISO-8859-1でデコードした物を
filename
引数で渡しています。これで何故Chromeでは正常なファイル名でダウンロードされ、IEでは文字化けするのかが分かりません。ブラウザの仕様という事なのでしょうか?
filename
引数で非ASCIIの文字が渡さた場合に、ISO-8859-1やUTF-8で解釈されるみたいな仕様があるという事を聞いたのですがそれの所為?
以上です。
良く分からない多く検討違いな事を聞いていたりするかもしれませんがよろしくお願い致します。


回答2件
あなたの回答
tips
プレビュー