Springboot下载excel文件中文名乱码问题及解决

 更新时间:2024年05月31日 16:12:32   作者:时间的痕迹01  
这篇文章主要介绍了Springboot下载excel文件中文名乱码问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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"));

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何利用泛型封装通用的service层

    如何利用泛型封装通用的service层

    这篇文章主要介绍了如何利用泛型封装通用的service层,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java中使用JWT生成Token进行接口鉴权实现方法

    Java中使用JWT生成Token进行接口鉴权实现方法

    这篇文章主要介绍了Java中使用JWT生成Token进行接口鉴权实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 解读Spring事务是如何实现的

    解读Spring事务是如何实现的

    这篇文章主要介绍了Spring事务是如何实现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java中的远程方法调用之RPC使用

    Java中的远程方法调用之RPC使用

    本文介绍了RPC的基本概念、核心思想及其在分布式系统中的作用,重点讲解了Java中的三种RPC实现方式:RMI、Hessian和Dubbo,分别从适用场景、核心特点等方面做了对比对比较,并并提供了其基本实现代码示例,总结了各框架的优缺点,为实际开发中选择合适的技术栈提供了参考
    2026-05-05
  • Java开发中常用的 Websocket 技术参考

    Java开发中常用的 Websocket 技术参考

    WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,当然也支持客户端发送数据到服务端。
    2020-09-09
  • spring @Transactional 无效的解决方案

    spring @Transactional 无效的解决方案

    这篇文章主要介绍了spring @Transactional 无效的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 关于Intellij IDEA中的Version Control问题

    关于Intellij IDEA中的Version Control问题

    这篇文章主要介绍了Intellij IDEA中的Version Control问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • Spring Security 构建rest服务实现rememberme 记住我功能

    Spring Security 构建rest服务实现rememberme 记住我功能

    这篇文章主要介绍了Spring Security 构建rest服务实现rememberme 记住我功能,需要的朋友可以参考下
    2018-03-03
  • java数学类Math BigInteger BigDecimal使用介绍

    java数学类Math BigInteger BigDecimal使用介绍

    这篇文章主要为大家介绍了java数学类Math、BigInteger、BigDecimal的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 详解Java 信号量Semaphore

    详解Java 信号量Semaphore

    这篇文章主要介绍了Java 信号量Semaphore的相关资料,帮助大家更好的理解和学习Java并发,感兴趣的朋友可以了解下
    2020-09-09

最新评论