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());其實亂碼就是亂在;filename=" + fileName這里,對文件名的編碼設定上。
使用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”
為了解決這個問題
百度了好久,是這樣的
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";
// 針對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后面設置編碼格式是重點
response.setHeader("Content-disposition", "attachment;filename="+fileName+";"+"filename*=utf-8''"+fileName);
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.copy(inputStream, response.getOutputStream());完美解決!??!
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java?Spring聲明式事務失效情況解決辦法(天翼通訊)
在Spring的聲明式事務中,多線程環(huán)境下事務會失效,因為子線程無法繼承父線程的事務上下文,這篇文章主要介紹了Java?Spring聲明式事務失效情況解決辦法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-10-10
SpringBoot+Querydsl?框架實現(xiàn)復雜查詢解析
本篇主要將介紹的是利用spring query dsl框架實現(xiàn)的服務端查詢解析和實現(xiàn)介紹,對SpringBoot?Querydsl?查詢操作感興趣的朋友一起看看吧2022-05-05
RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解
這篇文章主要為大家介紹了RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11

