使用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 類(lèi)型,如果獲取不到就會(huì)設(shè)置默認(rèn)的響應(yīng)MIME類(lèi)型,也就是application/octet-stream
我們發(fā)現(xiàn)他是通過(guò)拿文件的后綴名從而返回相應(yīng)的MIME類(lèi)型到這里我們發(fā)現(xiàn)還是很正常的,最起碼響應(yīng)的MIME類(lèi)型是沒(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實(shí)現(xiàn)簡(jiǎn)單的登錄功能
這篇文章主要為大家詳細(xì)介紹了springSecurity實(shí)現(xiàn)簡(jiǎn)單的登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09java中servlet實(shí)現(xiàn)登錄驗(yàn)證的方法
做web開(kāi)發(fā),登錄驗(yàn)證是免不了的,今天學(xué)習(xí)了servlet的登錄驗(yàn)證,當(dāng)然是很簡(jiǎn)單的,沒(méi)有使用session,request等作用域?qū)ο螅赃€是可以直接通過(guò)地址訪(fǎng)問(wèn)網(wǎng)頁(yè)的。2013-05-05Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究
這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫(xiě)操作實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Java 通過(guò) 二三法 巧解前端數(shù)據(jù)顯示
實(shí)踐來(lái)源于理論,做開(kāi)發(fā)前肯定要先了解相關(guān)的規(guī)則和原理,看到標(biāo)題或許你會(huì)好奇什么是二三法。本篇文章帶你深入了解,需要的朋友可以參考下2021-10-10Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法
這篇文章主要介紹了Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-02-02Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例
上傳是Web工程中很常見(jiàn)的功能,SpringMVC框架簡(jiǎn)化了文件上傳的代碼,本文給大家總結(jié)了Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例,并通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決
本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09