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)下載下傳也是亂碼。