1. 程式人生 > >response.addHeader中文亂碼

response.addHeader中文亂碼

最近專案中在寫資料從庫中匯出到excel檔案中,然後通過二進位制流的方式下載儲存在伺服器中的檔案,然後下載下來的檔案的中文一直顯示不出來,因為之前見過這種問題,這次又遇到了,所以還是記錄一下吧。

response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO8859-1"));
response.addHeader("Content-Length", "" + file.length());

以上是可以是用的程式碼,相比於錯誤的程式碼,就添加了一個引數,來限定編碼格式 :  "ISO8859-1" ,這裡的newSrting是有兩個建構函式的。

response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) ); 
在確保附件檔名都是簡 體中文字的情況下,那麼這個辦法確實是最有效的。但現在的系統通常都加入了 國際化的支援,普遍使用UTF-8。

寫法如下:

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

上面紅色框中是之前顯示不出中文的檔名稱,前面的則是正確的顯示方式。