web 下载文件的乱码问题

cwmlow 2019-12-03 04:04:32
删了大部分逻辑,大致是这样
用的postman做的测试
搜寻并照着网上设置的编码格式,仍然乱码
换过好几种了,要么为测试.xls,要么就为??????.xls
求解答

...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2019-12-04
  • 打赏
  • 举报
回复
引用 6 楼 树成 的回复:
下载文件要正常显示中文需要严格按照浏览器响应头规范来写:

response.setHeader("Location", URLEncoder.encode(String.valueOf(entities.get(0).getFileName()), "utf-8"));
				response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''"+URLEncoder.encode(String.valueOf(entities.get(0).getFileName()), "utf-8"));
				response.setContentLength((int)entities.get(0).length());
				response.setContentType(entities.get(0).getContentType());
				 in=entities.get(0).getData();
				 out=response.getOutputStream();
				StreamUtils.writer(in, out, entities.get(0).length(), 2048);
注意Content-Disposition响应头的描述,在filename的描述为filename*=UTF-8''文件名。
另外,中文文件名需要经过URL转义,需要借助URLEncoder.encode工具,注意指定编码格式为UTF-8
树成 2019-12-04
  • 打赏
  • 举报
回复
下载文件要正常显示中文需要严格按照浏览器响应头规范来写:

response.setHeader("Location", URLEncoder.encode(String.valueOf(entities.get(0).getFileName()), "utf-8"));
				response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''"+URLEncoder.encode(String.valueOf(entities.get(0).getFileName()), "utf-8"));
				response.setContentLength((int)entities.get(0).length());
				response.setContentType(entities.get(0).getContentType());
				 in=entities.get(0).getData();
				 out=response.getOutputStream();
				StreamUtils.writer(in, out, entities.get(0).length(), 2048);
注意Content-Disposition响应头的描述,在filename的描述为filename*=UTF-8''文件名。
天涯若风 2019-12-03
  • 打赏
  • 举报
回复
先看下你本地服务的编码是什么。 保证 每个环节的编码都一致; 其次还有可能是浏览器的编码
Valerie00 2019-12-03
  • 打赏
  • 举报
回复
引用 3 楼 cwmlow 的回复:
[quote=引用 2 楼 Valerie00 的回复:]
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName + ".xlsx", "UTF-8"))));

首先谢谢你的回答
我认为该方法等价于fileName = new String(fileName.getBytes("UTF-8"), "ISO_8859_1");
也曾不死心尝试使用过这种方法并打了断点检查却无果
response返回仍然乱码
[/quote]
cwmlow 2019-12-03
  • 打赏
  • 举报
回复
引用 2 楼 Valerie00 的回复:
response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName + ".xlsx", "UTF-8"))));
首先谢谢你的回答 我认为该方法等价于fileName = new String(fileName.getBytes("UTF-8"), "ISO_8859_1"); 也曾不死心尝试使用过这种方法并打了断点检查却无果 response返回仍然乱码
Valerie00 2019-12-03
  • 打赏
  • 举报
回复
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName + ".xlsx", "UTF-8"))));
Valerie00 2019-12-03
  • 打赏
  • 举报
回复
引用 楼主 cwmlow 的回复:
删了大部分逻辑,大致是这样
用的postman做的测试
搜寻并照着网上设置的编码格式,仍然乱码
换过好几种了,要么为测试.xls,要么就为??????.xls
求解答


fileName 的编码改为utf-8

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧