今天爲大家分享一篇完美解決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"));
}