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


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

 

因為從服務器向瀏覽器發送中文時,需要對內容進行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);  
		 
二、還有一種通用的方法,可能簡單點,但是如果文件名夾雜個別特殊符號,可能還會亂碼,不過對大多數帶有特殊符號的中文名還是好使的;
- 向將字符串用gbk進行解碼,然后在使用iso8859-1進行編碼
fileName = new String(fileName.getBytes("gbk"),"iso8859-1");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM