使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決
前言
在開(kāi)發(fā)過(guò)程中遇到的一個(gè)小問(wèn)題,實(shí)現(xiàn)一個(gè)下載模板的接口,我選擇了使用hutool包的ServletUtil.write方法去進(jìn)行文件下載,但調(diào)試過(guò)程中下載出來(lái)的文件名是亂碼的,那么是為什么呢?
代碼片段如下:

一、問(wèn)題分析
我們先來(lái)看看ServletUtil.write方法的源碼

我們發(fā)現(xiàn)他會(huì)去調(diào)用getMimeType方法去分析MIME 類型,如果獲取不到就會(huì)設(shè)置默認(rèn)的響應(yīng)MIME類型,也就是application/octet-stream

我們發(fā)現(xiàn)他是通過(guò)拿文件的后綴名從而返回相應(yīng)的MIME類型到這里我們發(fā)現(xiàn)還是很正常的,最起碼響應(yīng)的MIME類型是沒(méi)問(wèn)題的我們接著往下看,getInputStream沒(méi)什么好看的,就是獲取輸入流那么重點(diǎn)就是看write方法了

一般出現(xiàn)文件名中文亂碼我們都會(huì)想到響應(yīng)設(shè)置字符編碼沒(méi)設(shè)置為UTF-8,那么很明顯的看到,他設(shè)置的響應(yīng)字符編碼是通過(guò)我們響應(yīng)設(shè)置的編碼來(lái)使用的,也就是response.getCharacterEncoding(),如果他獲取為null,那么他就設(shè)置默認(rèn)值為UTF-8,而傳輸過(guò)程他也給我們使用了URLUtil.encodeAll給我們進(jìn)行編碼了,很明顯這里不會(huì)有問(wèn)題,那這時(shí)經(jīng)過(guò)debuger就發(fā)現(xiàn)了,原來(lái)是因?yàn)?code>response.getCharacterEncoding()獲取到的編碼為iso-8859-1編碼,所以下載出來(lái)的文件名亂碼了,那么解決的辦法也很簡(jiǎn)單,只需要手動(dòng)設(shè)置一下編碼就好了
二、解決辦法

總結(jié)
本文簡(jiǎn)單講述了使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題的原因以及如何解決,通過(guò)查看ServletUtil.write方法的源碼進(jìn)一步了解底層思路。更多相關(guān)ServletUtil.write下載亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn)(AccessDecisionManager與投票決策)
本文主要介紹了SpringSecurity授權(quán)機(jī)制的實(shí)現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來(lái)介紹一下,感興趣的可以了解一下2025-04-04
使用 Java8 實(shí)現(xiàn)觀察者模式的方法(下)
這篇文章主要介紹了使用 Java8 實(shí)現(xiàn)觀察者模式的方法(下)的相關(guān)資料,需要的朋友可以參考下2016-02-02
Spring反射內(nèi)置工具類ReflectionUtils用法及說(shuō)明
這段文章主要介紹了Java反射機(jī)制及其在獲取sentinel熔斷規(guī)則map和操作類屬性方法中的應(yīng)用,通過(guò)JDK和Spring的ReflectionUtils展示了如何優(yōu)雅地處理反射操作,提升代碼的可閱讀性和維護(hù)性2026-06-06
SpringBoot整合EasyExcel?3.x的完整示例
EasyExcel 是一個(gè)基于 Java 的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的 Excel 處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能,這篇文章主要介紹了SpringBoot整合EasyExcel3.x的過(guò)程,需要的朋友可以參考下2023-07-07
java判斷l(xiāng)ist不為空的實(shí)現(xiàn),和限制條數(shù)不要在一起寫
這篇文章主要介紹了java判斷l(xiāng)ist不為空的實(shí)現(xiàn),和限制條數(shù)不要在一起寫。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01

