在做java文件下载时碰到了这个问题,从前端传来的参数与后台接收的参数都是正确的,但是经过编码设置下载后,文件名中的符号,如[]被自动转义了,示例:
response.addHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(filename,"UTF-8"));
这样设置文件名,会造成符号自动转义,具体原因正在找,解决方法如下:
String userAgent = request.getHeader("User-Agent");
//IE内核浏览器
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
filename = java.net.URLEncoder.encode(filename, "UTF-8");
} else {
// 非IE浏览器的处理:
filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-disposition",String.format("attachment; filename=\"%s\"", filename));
response.setContentType("multipart/form-data");
response.setCharacterEncoding("UTF-8");
这样下载的文件名就会与设置的文件名保持一致,不会被自动转义,也不会乱码,解决方法是从橙子橙博主的《java下载文件时文件名出现乱码的解决办法》博客中了解到的,在此感谢该博主!