VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Springboot下载excel文件中文名乱码问题及解决

这篇文章主要介绍了Springboot下载excel文件中文名乱码问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Springboot下载excel文件中文名乱码
核心代码
Springboot文件下载的时候文件名出现问题
1.一开始文件名全是下横线__
2.下横线的问题解决了
总结

Springboot下载excel文件中文名乱码
通常在下载文件时会通过HttpServletResponse对象设置一些属性以及文件名

核心代码
如下:

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(FILE_NAME, "UTF-8") + "");
response.setHeader("Content-Disposition", "attachment;filename=" + FILE_NAME+"");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");

红色部分是最终正确的姿势,最开始我是用紫色部分的代码实现的,但是在用postman调用接口的时候发现下载下来的文件名如果有中文就会出现乱码

查了一通资料,改用红色部分实现,但是用postman下载下来过后发现文件名称是经过编码的。

类似这样:

%E9%A2%84%E7%AE%97%E5%AF%BC%E5%85%A5.xlsx

于是我试了很多次还是这样,最后偶然发现在浏览器里面调用接口下载下来的文件名是正常的,不知道postman为啥始终不行

Springboot文件下载的时候文件名出现问题

1.一开始文件名全是下横线__
经查询之后,添加了这行代码

response.setHeader("Content-Disposition",
        "attachment;filename=" + URLEncoder.encode(homeworkname, "utf-8"))

2.下横线的问题解决了
但出现中文乱码,出现%%字符

再次查找之类,将上述的代码改成以下,解决乱码

response.setHeader("Content-Disposition", "attachment;filename="+ homeworkname +";filename*=utf-8''"+URLEncoder.encode(homeworkname,"UTF-8"));
除此之外,发现也可以用这种方法

response.setHeader("Content-Disposition",
        "attachment;filename=" + new String(homeworkname.getBytes("utf-8"), "ISO8859-1"));

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持

原文链接:https://blog.csdn.net/qq_17805707/article/details/128625183

相关教程