java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > ServletUtil.write下载乱码

使用ServletUtil.write方法下载接口文件中文乱码问题解决

作者:xiaodaidai丶

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

您可能感兴趣的文章:
阅读全文