Firefox下載文件時中文名亂碼問題

爲了形象化,先看幾張不一樣瀏覽器下下載文件時的效果圖:html

1:Firefox 36.0.1
java

2:IE8redis

3:Chrome 40.0.2214.93 m瀏覽器

4:360 7.1.1.322
網絡

很明顯在Firefox下出現了亂碼,出現亂碼通常是字符集的問題,這是怎麼回事呢?爲何其餘的瀏覽器都沒有問題呢?看了一下Firefox的字符集是Unicode,改爲簡體中文看看,發現文件名是不亂了,不過網頁的其餘部分全亂了,連百度都亂了!以下圖所示:post

恩,一時我也不知道是什麼緣由,看看Firefox下的下載文件的響應信息是什麼樣的,以下圖所示:測試

 之前爲了防止出現亂碼問題,後臺的文件名是通過這個轉換的(java.net.URLEncoder.encode(fileName, "UTF-8");),證實傳遞的過程當中沒有問題,不過爲何其餘瀏覽器在彈出下載對話框的時候沒有問題,而Firefox卻出現了亂碼呢?多是在彈出對話框的時候處理的方式不同吧!咱們百度看看!spa

針對這個問題,遇到的人仍是很多的,下面是我以爲很是有借鑑做用的資源:.net

1:這篇博文解釋的至關好,值得一看firefox

http://qixinglu.com/post/redisposition.html

2:這一篇也有必定的借鑑意義

http://my.oschina.net/iceman/blog/67541

3:下面是具體解決方案

http://f0rb.iteye.com/blog/1308579

http://www.cnblogs.com/stangray/archive/2010/06/28/1766884.html

http://blog.csdn.net/shixing_11/article/details/5858902

恩,看到這裏我相信,無論明白不明白爲何,只要動手實驗實驗,就能針對本身的狀況,找到這個問題的解決方案了,關鍵就是如何按照要求寫

"Content-Disposition","attachment;filename*=utf-8'zh_cn'文件名.xx"

個人解決方式以下(借鑑上面的解決方式):

                       //僅提供了部分代碼,由於咱們已經明確問題的所在,知道修改那一部分了,(代碼中downloadFileName 即表明 
String agent = (String)getRequest().getHeader("USER-AGENT"); if(agent != null && agent.toLowerCase().indexOf("firefox") > 0) { downloadFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?="; } else { downloadFileName = java.net.URLEncoder.encode(fileName, "UTF-8"); }*=utf-8'zh_cn'文件名.xx部分)*=utf-8'zh_cn'文件名.xx

 該段代碼經我測試,經過了Firefox 36.0.1/IE8/Chrome 40.0.2214.93 m/360 7.1.1.322等瀏覽器的考驗!

Firefox修改後的效果以下所示:

4:若是你感興趣,英文還不錯,能夠看看下面的內容

http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx

http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http

http://greenbytes.de/tech/tc2231/

 

很是感謝網絡上無私的貢獻者!

相關文章
相關標籤/搜索