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

 更新时间:2024年05月26日 09:19:14   作者: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下载乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java深度复制功能与用法实例分析

    Java深度复制功能与用法实例分析

    这篇文章主要介绍了Java深度复制功能与用法,简单讲述了深度复制的概念、功能并结合实例形式分析了java实现深度复制的具体操作技巧,需要的朋友可以参考下
    2018-01-01
  • java按竖线分割的实现

    java按竖线分割的实现

    在Java中,我们可以使用split()方法按竖线分割字符串,本文将介绍如何使用Java中的字符串分割方法来按竖线进行分割,同时提供代码示例来帮助读者理解,感兴趣的可以了解一下
    2024-01-01
  • SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    SpringSecurity授权机制的实现(AccessDecisionManager与投票决策)

    本文主要介绍了SpringSecurity授权机制的实现,其核心是AccessDecisionManager和投票系统,下面就来介绍一下,感兴趣的可以了解一下
    2025-04-04
  • 使用 Java8 实现观察者模式的方法(下)

    使用 Java8 实现观察者模式的方法(下)

    这篇文章主要介绍了使用 Java8 实现观察者模式的方法(下)的相关资料,需要的朋友可以参考下
    2016-02-02
  • 浅谈Java中的class类

    浅谈Java中的class类

    这篇文章主要介绍了浅谈Java中的class类,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Spring反射内置工具类ReflectionUtils用法及说明

    Spring反射内置工具类ReflectionUtils用法及说明

    这段文章主要介绍了Java反射机制及其在获取sentinel熔断规则map和操作类属性方法中的应用,通过JDK和Spring的ReflectionUtils展示了如何优雅地处理反射操作,提升代码的可阅读性和维护性
    2026-06-06
  • SpringBoot整合EasyExcel 3.x的完整示例

    SpringBoot整合EasyExcel 3.x的完整示例

    EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具,它能让你在不用考虑性能、内存的等因素的情况下,快速完成 Excel 的读、写等功能,这篇文章主要介绍了SpringBoot整合EasyExcel3.x的过程,需要的朋友可以参考下
    2023-07-07
  • 带你入门Java的方法

    带你入门Java的方法

    这篇文章主要介绍了java基础之方法详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-07-07
  • java判断list不为空的实现,和限制条数不要在一起写

    java判断list不为空的实现,和限制条数不要在一起写

    这篇文章主要介绍了java判断list不为空的实现,和限制条数不要在一起写。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java 设计模式中的命令模式详情

    Java 设计模式中的命令模式详情

    这篇文章主要介绍了Java 设计模式中的命令模式详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07

最新评论