最近在做項目,采用Spring Boot赘淮,下載文件/導(dǎo)出excel的中文文件名總是在主流瀏覽器上顯示亂碼辕录。然后就去網(wǎng)上搜索相關(guān)解決辦法,拿網(wǎng)上辦法進行測試發(fā)現(xiàn)那些方法都已經(jīng)不適用現(xiàn)在主流瀏覽器最新的版本了梢卸,于是經(jīng)過自己琢磨走诞、探索、嘗試蛤高,最終得到了一個簡潔蚣旱、可實現(xiàn)的解決辦法。現(xiàn)分享出來給大家戴陡,希望對你們有所幫助塞绿,如果對你有用,也希望你多多給予支持恤批,在此先謝謝了异吻。
下面就直接上代碼:
/******************************************************************************
*如需轉(zhuǎn)載請注明出處.
*****************************************************************************/
package?com.zxm.util;
import?java.io.UnsupportedEncodingException;
import?java.net.URLEncoder;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?org.apache.log4j.Logger;
/**
*@Title: ContentDispositionUtils.java
*@Package?com.zxm.util
*@Description: 解決不同瀏覽器上中文文件名的下載亂碼問題的工具類
*@author: zxm
*@date: 2017年12月4日下午1:46:55
*@version?V1.0
*@company: xxx
*/
publicclass?ContentDispositionUtils {
privatestatic?Loggerlogger= Logger.getLogger(ContentDispositionUtils.class);
/**
*@Title: contentDisposition
*@Description: 解決不同瀏覽器上文件下載的中文名亂碼問題
*@param?filename 導(dǎo)出/下載的文件的文件名
*@param?request
*@param?response
*/
public?static?void?contentDisposition(String filename, String userAgent, HttpServletRequest request, HttpServletResponse response) {
try{
????response.reset();
????response.setCharacterEncoding("UTF-8");
????String newFilename= URLEncoder.encode(filename,"UTF-8").replace("+"," ");
????String rtn="filename=\""+newFilename+"\"";
? ??if(userAgent!=null) {
????????userAgent=userAgent.toLowerCase();
? ??????if(userAgent.indexOf("edge") != -1) {
????????????newFilename= URLEncoder.encode(filename,"UTF-8").replace("+"," ");
????????????rtn="filename=\""+newFilename+"\"";
????????}elseif(userAgent.indexOf("trident") != -1) {
????????????rtn="filename=\""+newFilename+"\"";
????????}else{
????????????rtn="filename=\""+newString(filename.getBytes("UTF-8"),"ISO8859-1") +"\"";
????????}
? ? ?}
????response.setHeader("Content-Disposition","attachment;"+rtn);
}catch(UnsupportedEncodingExceptione) {
? ??logger.error("UnsupportedEncodingException.");
}
}
}
/******************************************************************************
//調(diào)用方法去調(diào)用上述工具類示例,以導(dǎo)出excel為例:
OutputStreamout=null;
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
String userAgent=request.getHeader("USER-AGENT");
String filename="統(tǒng)計數(shù)據(jù)"+".xlsx";
//設(shè)置文件名在不同主流瀏覽器上的編碼
ContentDispositionUtils.contenDisposition(filename,userAgent,request,response);
******************************************************************************/
此工具類是在以下瀏覽器版本上經(jīng)測試沒問題,其他低版本還需要自己親自去測試:
Microsoft Edge 20.10240.17146.0:Mozilla/5.0 (Windows NT 10.0;? Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135? Safari/537.36 Edge/12.10240
IE 11:Mozilla/5.0 (Windows NT 10.0;? WOW64; Trident/7.0; rv:11.0) like Gecko
Opera 49.0:Mozilla/5.0 (Windows NT 10.0;? WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89? Safari/537.36 OPR/49.0.2725.47
Safari 5.1.7:Mozilla/5.0 (Windows NT 10.0;? WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89? Safari/537.36 OPR/49.0.2725.47
Chrome 62.0.3202.94:Mozilla/5.0 (Windows NT 10.0;? WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89? Safari/537.36 OPR/49.0.2725.47
FireFox 57.0.1:Mozilla/5.0 (Windows NT 10.0;? WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89? Safari/537.36 OPR/49.0.2725.47
簡書編輯器诀浪,格式太少棋返,如果想看美觀一些的代碼瀏覽?不同瀏覽器上中文文件名的下載/導(dǎo)出亂碼問題(Java)