文件下載 解決中文文件名亂碼

在寫文件下載的時候遇到的一個問題,也就是下載的文件的文件名是中文的話,瀏覽器下載的時候多是亂碼,解決方案以下:java

 

由於從服務器向瀏覽器發送中文時,須要對內容進行URL編碼。
> 大部分瀏覽器使用以下方式便可解決亂碼問題:URLEncoder.encode(fileName, "utf-8");
> 可是火狐默認以Base64來解碼的,因此要爲火狐單獨處理。
> 能夠使用以下代碼來判斷瀏覽器的類型,而後進行不一樣的編碼處理
 // 請求客戶端操做系統的信息  
	    final String userAgent = request.getHeader("USER-AGENT");  
	    if(userAgent.contains("Firefox")){
			//是火狐瀏覽器,使用BASE64編碼
			fileName = "=?utf-8?b?"+new BASE64Encoder().encode(fileName.getBytes("utf-8"))+"?=";
		}else{
			//給文件名進行URL編碼
			//URLEncoder.encode()須要兩個參數,第一個參數時要編碼的字符串,第二個是編碼所採用的字符集
			fileName = URLEncoder.encode(fileName, "utf-8");
		}

而後再去設置響應頭,應該就沒問題了瀏覽器

 response.setContentType(servletContext.getMimeType(fileName));
response.addHeader("Content-Disposition", "attachment; filename=" + fileName);  
		 
2、還有一種通用的方法,可能簡單點,可是若是文件名夾雜個別特殊符號,可能還會亂碼,不過對大多數帶有特殊符號的中文名仍是好使的;
- 向將字符串用gbk進行解碼,而後在使用iso8859-1進行編碼
fileName = new String(fileName.getBytes("gbk"),"iso8859-1");
相關文章
相關標籤/搜索