不同瀏覽器上中文文件名的下載/導(dǎo)出亂碼問題(Java)

最近在做項(xiàng)目,采用Spring Boot,下載文件/導(dǎo)出excel的中文文件名總是在主流瀏覽器上顯示亂碼。然后就去網(wǎng)上搜索相關(guān)解決辦法,拿網(wǎng)上辦法進(jìn)行測試發(fā)現(xiàn)那些方法都已經(jīng)不適用現(xiàn)在主流瀏覽器最新的版本了,于是經(jīng)過自己琢磨、探索、嘗試,最終得到了一個(gè)簡潔、可實(shí)現(xiàn)的解決辦法?,F(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)計(jì)數(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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容