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

最近在做項目,采用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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷猪,隨后出現(xiàn)的幾起案子睛竣,更是在濱河造成了極大的恐慌,老刑警劉巖求摇,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件射沟,死亡現(xiàn)場離奇詭異,居然都是意外死亡月帝,警方通過查閱死者的電腦和手機躏惋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚷辅,“玉大人簿姨,你說我怎么就攤上這事◆じ悖” “怎么了扁位?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趁俊。 經(jīng)常有香客問我域仇,道長,這世上最難降的妖魔是什么寺擂? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任暇务,我火速辦了婚禮,結(jié)果婚禮上怔软,老公的妹妹穿的比我還像新娘垦细。我一直安慰自己,他們只是感情好挡逼,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布括改。 她就那樣靜靜地躺著,像睡著了一般家坎。 火紅的嫁衣襯著肌膚如雪嘱能。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天虱疏,我揣著相機與錄音惹骂,去河邊找鬼。 笑死做瞪,一個胖子當著我的面吹牛析苫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穿扳,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了薇芝?” 一聲冷哼從身側(cè)響起路翻,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎履羞,沒想到半個月后峦萎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡忆首,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年爱榔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糙及。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡详幽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浸锨,到底是詐尸還是另有隱情唇聘,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布柱搜,位于F島的核電站迟郎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聪蘸。R本人自食惡果不足惜宪肖,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望健爬。 院中可真熱鬧控乾,春花似錦、人聲如沸浑劳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魔熏。三九已至衷咽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒜绽,已是汗流浹背镶骗。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躲雅,地道東北人鼎姊。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親相寇。 傳聞我的和親對象是個殘疾皇子慰于,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容