前提・実現したいこと
JavaでServretを使ってのファイルダウンロードで文字化けされる原因が知りたい。
発生している問題・エラーメッセージ
Servletを使いファイルダウンロードを行うとIEでは正常にダウンロード出来るが、Chromeでファイル名の半角記号がUTF-8でエンコードされたままデコードされない。
該当のソースコード
Java
fileName = URLEncoder.encode("ファイル名", "UTF-8") response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
試したこと
1
fileName = URLEncoder.encode("ファイル名", "UTF-8") response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
2
fileName = URLEncoder.encode("ファイル名", "UTF-8") response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + fileName);
2に変更する事でChromeでもフ
ァイル名の半角記号がデコードされてダウンロードされました。
質問したい事
-
該当のソースコードではUTF-8にエンコードしたファイル名をそのままダウンロードファイルに設定しているのですが、IEやChromeでダウンロードする際にファイル名がデコードされてダウンロードされるのですか?(Chromeでは半角記号はデコードされないですが)
-
1の方法では
response.setContentType("application/octet-stream;charset=UTF-8");
でUTF-8の文字コードをしているがこれではダウンロードされるファイル名はデコードされませんでした。何故でしょうか? -
2の方法では
filename*=
で文字コードを指定することで半角記号ファイル名がデコードされダウンロードされましたが、なせ文字コードを指定した事でダウンロードが出来るようになったのでしょうか?
以上です。
良く分からない多く検討違いな事を聞いていたりするかもしれないですがよろしくお願い致します。


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