解決Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文顯示亂碼

原文鏈接:https://www.cnblogs.com/zhycyq/p/3363365.html

如果file.Name爲中文則亂碼。解決辦法是
方法1:

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

下載的程序裏有了上面一句,一般在IE6的下載提示框上將正確顯示文件的名字,無論是簡體中文,還是日文。但是文字只要超過17個字,就不能下載了。

一. 通過原來的方式,也就是先用URLEncoder編碼,當中文文字超過17個時,IE6 無法下載文件。這是IE的bug,參見微軟的知識庫文章 KB816868 。原因可能是IE在處理 Response Header 的時候,對header的長度限制在150字節左右。而一個漢字編碼成UTF-8是9個字節,那麼17個字便是153個字節,所以會報錯。而且不跟後綴也不對.

方法2:

response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) ); 

在確保附件文件名都是簡 體中文字的情況下,那麼這個辦法確實是最有效的,不用讓客戶逐個的升級IE。如果臺灣同胞用,把gb2312改成big5就行。但現在的系統通常都加入了 國際化的支持,普遍使用UTF-8。如果文件名中又有簡體中文字,又有繁體中文,還有日文。那麼亂碼便產生了。另外,在上Firefox (v1.0-en)下載也是亂碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章