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处理后,再把文件名的中文编码改成英文编码,这样通用性更好。

经验分享 程序员 微信小程序 职场和发展