JAvaファイルダウンロード時のファイル名がieとfirefoxの下で一致しない問題
まず、ファイル名はutf-8符号化でデータベースに保存され、ファイル名は「1_中国語ファイル123.txt」と暫定的に設定され、以下の処理でダウンロードされる
このときieの下でファイルダウンロードをクリックすると、中国語名「1_中国語ファイル123.txt%0 A」が正しく表示されるが、ファイル名の末尾には%0 A文字(個人的には終了符のutf-8符号化と推測される)が現れる.しかしこのときfirefoxの下に「1_%E 4%B 8%AD%E 6%96%87%E 6%96%87%E 4%BB%B 6123.txt%0 A」と表示され、別のシナリオを試してみました
このときieの下でダウンロードしたときにchuのファイル名が文字化けしていた.firefoxの下には「1_中国語ファイル123.txt」が正しく表示されています.ソリューション:
response.setContentType("application/octet-stream;charset=UTF-8");
fileName=java.net.URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
このときieの下でファイルダウンロードをクリックすると、中国語名「1_中国語ファイル123.txt%0 A」が正しく表示されるが、ファイル名の末尾には%0 A文字(個人的には終了符のutf-8符号化と推測される)が現れる.しかしこのときfirefoxの下に「1_%E 4%B 8%AD%E 6%96%87%E 6%96%87%E 4%BB%B 6123.txt%0 A」と表示され、別のシナリオを試してみました
response.setContentType("application/octet-stream;charset=UTF-8");
fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
このときieの下でダウンロードしたときにchuのファイル名が文字化けしていた.firefoxの下には「1_中国語ファイル123.txt」が正しく表示されています.ソリューション:
public String getFileName(String filename, HttpServletRequestWrapper reqw){
String agent = reqw.getHeader("USER-AGENT");
if(null != agent && -1 != agent.indexOf("MSIE")){
filename = URLEncoder.encode(filename,"UTF8");
}else if(null != agent && -1 != agent.indexOf("Mozilla")){
filename = MimeUtility.encodeText(filename,"UTF8","B");
}
return filename;
}