使用ServletUtil.write方法下载接口文件中文乱码问题解决
前言
在开发过程中遇到的一个小问题,实现一个下载模板的接口,我选择了使用hutool包的ServletUtil.write方法去进行文件下载,但调试过程中下载出来的文件名是乱码的,那么是为什么呢?
代码片段如下:

一、问题分析
我们先来看看ServletUtil.write方法的源码

我们发现他会去调用getMimeType方法去分析MIME 类型,如果获取不到就会设置默认的响应MIME类型,也就是application/octet-stream

我们发现他是通过拿文件的后缀名从而返回相应的MIME类型到这里我们发现还是很正常的,最起码响应的MIME类型是没问题的我们接着往下看,getInputStream没什么好看的,就是获取输入流那么重点就是看write方法了

一般出现文件名中文乱码我们都会想到响应设置字符编码没设置为UTF-8,那么很明显的看到,他设置的响应字符编码是通过我们响应设置的编码来使用的,也就是response.getCharacterEncoding(),如果他获取为null,那么他就设置默认值为UTF-8,而传输过程他也给我们使用了URLUtil.encodeAll给我们进行编码了,很明显这里不会有问题,那这时经过debuger就发现了,原来是因为response.getCharacterEncoding()获取到的编码为iso-8859-1编码,所以下载出来的文件名乱码了,那么解决的办法也很简单,只需要手动设置一下编码就好了
二、解决办法

总结
本文简单讲述了使用ServletUtil.write方法下载接口文件中文乱码问题的原因以及如何解决,通过查看ServletUtil.write方法的源码进一步了解底层思路。更多相关ServletUtil.write下载乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)
本文主要介绍了SpringSecurity授权机制的实现,其核心是AccessDecisionManager和投票系统,下面就来介绍一下,感兴趣的可以了解一下2025-04-04
Spring反射内置工具类ReflectionUtils用法及说明
这段文章主要介绍了Java反射机制及其在获取sentinel熔断规则map和操作类属性方法中的应用,通过JDK和Spring的ReflectionUtils展示了如何优雅地处理反射操作,提升代码的可阅读性和维护性2026-06-06
SpringBoot整合EasyExcel 3.x的完整示例
EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具,它能让你在不用考虑性能、内存的等因素的情况下,快速完成 Excel 的读、写等功能,这篇文章主要介绍了SpringBoot整合EasyExcel3.x的过程,需要的朋友可以参考下2023-07-07


最新评论