ServletResponse下載文件亂碼

藉助於強大的搜索引擎和本地試驗。

通常來說解決亂碼兩個方式:

1、把文件名(包括漢字)編碼成UTF-8

String downloadOrigalFile = "測試文件亂碼.xlsx";

String downloadFileName = java.net.URLEncoder.encode(downloadOrigalFile, "UTF-8");

response.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);

如果文件名中出現空格,需要把空格替換爲%20,UTF-8下+表示空格

downloadFileName = downloadFileName.replace("+", "%20");

2、把文件名編碼成ISO-8859-1(因爲默認編碼是ISO-8859-1)

String downloadOrigalFile = "測試文件亂碼.xlsx";

final String LOCALE_ENCODING = "gb2312";

// 此處的LOCALE_ENCODING=gb2312:通常可以使用java的System.getProperties()遍歷察看獲得,

// 一般有兩個值可能和此有關,請參考結合實際情況使用。

// sun.jnu.encoding=GBK

// file.encoding=UTF-8

final String DEFAULT_ENCODING = "ISO-8859-1";

String downloadFileName = new String(downloadOrigalFile.getBytes(LOCALE_ENCODING), DEFAULT_ENCODING);

如果文件名中出現空格,需要把空格替換爲%20

downloadFileName = downloadFileName.replace(" ", "%20");

// 此處的getBytes()如果不指定編碼,在跨平臺的時候可能會出現問題,建議明確指定編碼。

response.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName);

====

3、如果要在瀏覽器地址中顯示中文,一般需要修改web容器的默認編碼URIEncoding="UTF-8"

    (即用get的方式直接下載文件)

例如tomcat容器,在TOMCAT_HOME/conf/server.xml中的如下位置加入

 <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" 

               connectionTimeout="20000"

               redirectPort="8443" />

4、URL中常用的特殊編碼

+ URL 中+號表示空格 %2B

空格 URL中的空格可以用+號或者編碼 %20

/ 分隔目錄和子目錄 %2F

? 分隔實際的URL和參數 %3F

% 指定特殊字符 %25

# 表示書籤 %23

& URL 中指定的參數間的分隔符 %26

= URL 中指定參數的值 %3D

參照鏈接:

萬惡的公司代碼,都是用的快照,所以對各位參照引用作者非常抱歉。。。


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