文件名中文乱码
背景
下载zip压缩包,中文文件名乱码不能正常显示
代码如下:
String fileName = "人员信息.zip";
response.setContentType("application/octet-stream;charset=UTF-8");
response.setContentType("application/x-zip-compressed;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Access-Contro1-A11ow-0rigin", "*");
File zip = ZipUtil.zip(new File("D://file/sys/"));
ServletOutputStream output = response.getOutputStream();
FileInputStream input = new FileInputStream(zip);
byte[] buff = new byte[1024 * 10];
int len = 0;
while ((len = input.read(buff)) > -1) {
output.write(buff, 0, len);
}
output.flush();
output.close();
下载结果:
Bug修复:
String fileName = URLEncoder.encode("人员信息.zip", "UTF-8");
修复后的下载结果:
结论
使用URLEncoder对文件名进行处理之后,完美解决问题。
URLEncoder的作用:
客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文。
而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址,
将网址中的非ASCII码内容转换成可以传输的字符
编译后的响应头: