java 文件名是中文 导出失败
在导出文件的时候,导出内容是空的。 看了下名字是中文的,然后就把中文改成了英文试了下,导出是正常的。
看了下代码
fileName = URLEncoder.encode(fileName, "UTF-8");
是有用URLEncoder.encode处理的,应该没啥问题啊。
在header那把utf-8转成英文的 charset=iso-8859-1是英文的编码
response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
这样处理就行了。
导出的代码:
//导出文件 public void downFile(HttpServletResponse response, String fileName, String pathName) throws IOException { fileName = URLEncoder.encode(fileName, "UTF-8"); //设置文件头:最后一个参数是设置下载文件名 response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream;"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); try (DataInputStream in = new DataInputStream(new FileInputStream(new File(pathName))); //输出流 OutputStream out = response.getOutputStream()) { byte[] bufferOut = new byte[2048]; int bytes; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } } catch (IOException e) { e.getMessage(); } }
总结:
在处理中文的时候,因为浏览器编码的问题,除了URLEncoder.encode处理后,再把文件名的中文编码改成英文编码,这样通用性更好。