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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值