爲了解決中文文件名亂碼的問題,通常都會通過URLEncoder轉碼的方式來解決,關鍵代碼如下
response.setContentType( "application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
但這樣會出現的問題是,如果文件名有空格,下載下來文件名中的空格就會被+號替代,網上搜索大多數是URLEncoder.encode之後將+號替換成%20,這種做法指標不治本,如果文件名中有+號或%號等特殊符號,加號就會變成%20,%號就會變成%25輸出,所以有特殊字符都不行。URLEncoder.encode可以解決中文名亂碼問題,但無法解決文件名中包含特殊字符問題,所以正確的做法如下
response.setContentType( "application/x-msdownload");
fileName = new String(fileName.getBytes("gbk"), "iso8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
親測有效