Java下載文件中文文件名亂碼的解決方案(文件名包含很多%)
Java下載文件中文文件名亂碼問題
一般情況下,大家都是這樣
fileName = URLEncoder.encode(fileName, "UTF-8"); response.reset(); response.setHeader("Content-disposition", "attachment;filename=" + fileName); response.setContentType("application/octet-stream; charset=UTF-8"); IoUtil.copy(inputStream, response.getOutputStream());
其實(shí)亂碼就是亂在;filename=" + fileName這里,對(duì)文件名的編碼設(shè)定上。
使用URLEncoder.encode(filepath,"UTF-8")雖然可以解決在提示下載框中正確顯示漢字文件名的問題,并且在選擇保存,然后打開的情況下,文件名稱也可以正確的顯示。
但是在提示下載框中,選擇直接打開,則文件名稱變成了類似這樣的樣子。
“%E7%BB%99%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E7%9A%84%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6%E5%90%8D”
為了解決這個(gè)問題
百度了好久,是這樣的
String downloadfile = new String(filepath.getBytes("gb2312"),"iso8859-1"); response.addHeader("Content-Disposition","attachment;filename=" + downloadfile );
還有這樣
String userAgent = request.getHeader("User-Agent"); String formFileName = "員工表.xls"; // 針對(duì)IE或者以IE為內(nèi)核的瀏覽器: if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { formFileName = java.net.URLEncoder.encode(formFileName, "UTF-8"); } else { // 非IE瀏覽器的處理: formFileName = new String(formFileName.getBytes("UTF-8"), "ISO-8859-1"); } response.setHeader("Content-disposition",String.format("attachment; filename=\"%s\"", formFileName)); response.setContentType("multipart/form-data"); response.setCharacterEncoding("UTF-8");
發(fā)現(xiàn)都不能解決問題,不懈努力,崩潰邊緣
最終解決
fileName = URLEncoder.encode(fileName, "UTF-8"); response.reset(); // fileName后面設(shè)置編碼格式是重點(diǎn) response.setHeader("Content-disposition", "attachment;filename="+fileName+";"+"filename*=utf-8''"+fileName); response.setContentType("application/octet-stream; charset=UTF-8"); IoUtil.copy(inputStream, response.getOutputStream());
完美解決!??!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot應(yīng)用啟動(dòng)過程分析
這篇文章主要介紹了SpringBoot應(yīng)用啟動(dòng)過程分析,需要的朋友可以參考下2017-08-08Java中ReentrantLock和ReentrantReadWriteLock的原理
這篇文章主要介紹了Java中ReentrantLock和ReentrantReadWriteLock的原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼
最近工作中遇到一個(gè)需求,是需要導(dǎo)出數(shù)據(jù)到Excel表格里,所以寫個(gè)Demo測試一下,還是比較簡單的,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10解決idea check out 切換分支時(shí)找不到需要的分支問題
這篇文章主要介紹了解決idea check out 切換分支時(shí)找不到需要的分支問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02springboot使用hibernate validation對(duì)參數(shù)校驗(yàn)的實(shí)現(xiàn)方法
這篇文章主要介紹了spring-boot 使用hibernate validation對(duì)參數(shù)進(jìn)行優(yōu)雅的校驗(yàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Java代碼實(shí)現(xiàn)微信頁面滾動(dòng)防露底(核心代碼)
這篇文章主要介紹了Java代碼實(shí)現(xiàn)微信頁面滾動(dòng)防露底的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09