我如何在java中设置本地化文件名。目前,每次我单击应用程序中具有非ascii文件名的本地化文件时,都会弹出Windows保存对话框,但如果字符集高于ISO-,则它不会正确显示文件名88859-1。
这是我保存文件的代码。
InputStream inputStream = null;
try {
response.resetBuffer();
response.setContentType(fileStream.getContentType());
response.setContentLength((int) fileStream.getContentLength());
response.addHeader("Content-Disposition",
"attachment;filename=\"" + fileName + "\"");
ServletOutputStream stream = response.getOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
int total = 0;
inputStream = fileStream.getInputStream();
while ((read = inputStream.read(buffer)) > 0) {
stream.write(buffer, 0, read);
total += read;
}
response.flushBuffer();
} finally {
if (inputStream != null) {
inputStream.close();
}
}
如果有人可以分享他们关于如何解决此问题的想法,我将非常有帮助。
提前致谢。
gustafc 说的是正确的,但它并不能让你到达你想去的地方。RFC 2231 https://www.rfc-editor.org/rfc/rfc2231允许您使用非 ASCII 的替代格式Content-Type
and Content-Disposition
参数,但并非所有浏览器都支持。不幸的是,最有可能起作用的方法是忽略 RFC 2183 的内容并使用RFC 2047 编码字 https://www.rfc-editor.org/rfc/rfc2047在响应中:
response.addHeader("Content-Disposition", "attachment; " +
"filename=\"" + MimeUtility.encodeWord(fileName, "utf-8", "Q") + "\"");
请注意,这可能不适用于所有浏览器。 IE 的某些变体要求您对值进行 URL 编码:
response.addHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(filename, "utf-8"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)