response.setHeader解決文件名只能輸入17個漢字

原文件地址:http://hi.baidu.com/yuweiming/blog/item/a2ac4d08d1c0439e0b7b821b.html


Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+".xls");
如果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)下載也是亂碼。

發佈了25 篇原創文章 · 獲贊 12 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章