使用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下载乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论