下载文件名中文乱码

文件名中文乱码

背景

下载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码内容转换成可以传输的字符

编译后的响应头:
在这里插入图片描述


版权声明:本文为weixin_46475802原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。