我正在寫一個簡單的文件下載servlet,我無法獲得正確的文件名。嘗試URLEncoding和MimeEncoding在現有的答案中看到的文件名,但沒有一個工作。Java servlet下載文件名特殊字符
以下片段中的fileData對象包含MIME類型,字節[]內容和文件名,至少需要ISO-8859-2字符集,ISO-8859-1是不夠的。
如何讓我的瀏覽器正確顯示下載的文件名?
這裏是文件名的例子:árvíztűrőtükörfúrógép.xls並且它導致:árvíztqrptükörfúrógép.xls
protected void renderMergedOutputModel(Map model, HttpServletRequest req, HttpServletResponse res) throws Exception {
RateDocument fileData = (RateDocument) model.get("command.retval");
OutputStream out = res.getOutputStream();
if(fileData != null) {
res.setContentType(fileData.getMime());
String enc = "utf-8"; //tried also: ISO-8859-2
String encodedFileName = fileData.getName();
// also tried URLencoding and mime encoding this filename without success
res.setCharacterEncoding(enc); //tried with and without this
res.setHeader("Content-Disposition", "attachment; filename=" + encodedFileName);
res.setContentLength(fileData.getBody().length);
out.write(fileData.getBody());
} else {
res.setContentType("text/html");
out.write("<html><head></head><body>Error downloading file</body></html>"
.getBytes(res.getCharacterEncoding()));
}
out.flush();
}
請給,你會得到什麼,而不是文件名怎麼看一些例子。 – BalusC 2011-03-16 12:53:55
árvíztűrőtükörfúrógép.xls - >árvíztqrptükörfúrógép.xls – jabal 2011-03-16 13:15:49
是的,你是對的。這兩個字符在ISO-8859-2中僅在ISO-8859-2中不存在,導致每個匈牙利開發者都遇到許多問題.. :-) – jabal 2011-03-16 13:28:32