使用ServletUtil.write方法下載接口文件中文亂碼問題解決
前言
在開發(fā)過程中遇到的一個小問題,實現(xiàn)一個下載模板的接口,我選擇了使用hutool包的ServletUtil.write方法去進行文件下載,但調(diào)試過程中下載出來的文件名是亂碼的,那么是為什么呢?
代碼片段如下:
一、問題分析
我們先來看看ServletUtil.write方法的源碼
我們發(fā)現(xiàn)他會去調(diào)用getMimeType方法去分析MIME 類型,如果獲取不到就會設(shè)置默認(rèn)的響應(yīng)MIME類型,也就是application/octet-stream
我們發(fā)現(xiàn)他是通過拿文件的后綴名從而返回相應(yīng)的MIME類型到這里我們發(fā)現(xiàn)還是很正常的,最起碼響應(yīng)的MIME類型是沒問題的我們接著往下看,getInputStream沒什么好看的,就是獲取輸入流那么重點就是看write方法了
一般出現(xiàn)文件名中文亂碼我們都會想到響應(yīng)設(shè)置字符編碼沒設(shè)置為UTF-8
,那么很明顯的看到,他設(shè)置的響應(yīng)字符編碼是通過我們響應(yīng)設(shè)置的編碼來使用的,也就是response.getCharacterEncoding()
,如果他獲取為null
,那么他就設(shè)置默認(rèn)值為UTF-8
,而傳輸過程他也給我們使用了URLUtil.encodeAll
給我們進行編碼了,很明顯這里不會有問題,那這時經(jīng)過debuger就發(fā)現(xiàn)了,原來是因為response.getCharacterEncoding()
獲取到的編碼為iso-8859-1
編碼,所以下載出來的文件名亂碼了,那么解決的辦法也很簡單,只需要手動設(shè)置一下編碼就好了
二、解決辦法
總結(jié)
本文簡單講述了使用ServletUtil.write方法下載接口文件中文亂碼問題的原因以及如何解決,通過查看ServletUtil.write方法的源碼進一步了解底層思路。更多相關(guān)ServletUtil.write下載亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究
這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01Java 其中翻轉(zhuǎn)字符串的實現(xiàn)方法
這篇文章主要介紹了Java 其中翻轉(zhuǎn)字符串的實現(xiàn)方法,需要的朋友可以參考下2014-02-02mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問題解決
本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09