Java 解決瀏覽器下載文件中文名稱出現亂碼的原因?

今天爲大家分享一篇完美解決Java下載文件出現亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起過來看看吧

       在Java中有時生成文件之後讓前端下載,獲取的文件名中存在中文或者是空格的時候,下載的文件名稱出現亂碼。這個問題困擾了我好久,用過各種的轉碼都無濟於事。在後來終於解決了,在這裏和大家分享一下,其實也就是加一個方法判斷瀏覽器的的問題。

1:都是使用的new File() 創建的文件的中文名稱會亂碼

       你用new File();創建的文件的中文名稱會亂碼,可能是???%%&&%%%&&&&,也可能是。.啥亂碼。然後你遠程下載也是下載不了的,打開也是不行的,重命名可能也不行,遠程工具可能會卡住。網上也有很多人說文件名是這個控制的,但是我試了沒有用。如下所示,是不生效的:

2:設置文件編碼方式 UTF-8

     String filename = new String(filename.getBytes("gbk"),"utf-8");我幾乎沒有招了,大多數都是這麼說的,然而不行。我問了下我的一個同事,說你試試把utf-8直接寫到裏面去。

3:直接調用方法判斷設置對應的編碼方式即可

String agent = request.getHeader("USER-AGENT"); //獲取瀏覽器的信息
if(agent != null && agent.toLowerCase().indexOf("firefox")>0){
	//火狐瀏覽器自己會對URL進行一次URL轉碼所以區別處理
	response.setHeader("Content-Disposition",
			"attachment; filename="+ new String(filePath.getBytes("GB2312"),"ISO-8859-1"));
}else if(agent.toLowerCase().indexOf("safari")>0){
	//蘋果瀏覽器需要用ISO 而且文件名得用UTF-8
	response.setHeader("Content-Disposition",
			"attachment; filename="+ new String(filePath.getBytes("UTF-8"),"ISO-8859-1"));
}else{
	//其他的瀏覽器
	response.setHeader("Content-Disposition",
			"attachment; filename=\""+java.net.URLEncoder.encode(filePath, "UTF-8"));
}

 

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