Firefox下载文件时中文名乱码问题

为了形象化,先看几张不一样浏览器下下载文件时的效果图:html

1:Firefox 36.0.1
java

2:IE8redis

3:Chrome 40.0.2214.93 m浏览器

4:360 7.1.1.322
网络

很明显在Firefox下出现了乱码,出现乱码通常是字符集的问题,这是怎么回事呢?为何其余的浏览器都没有问题呢?看了一下Firefox的字符集是Unicode,改为简体中文看看,发现文件名是不乱了,不过网页的其余部分全乱了,连百度都乱了!以下图所示:post

恩,一时我也不知道是什么缘由,看看Firefox下的下载文件的响应信息是什么样的,以下图所示:测试

 之前为了防止出现乱码问题,后台的文件名是通过这个转换的(java.net.URLEncoder.encode(fileName, "UTF-8");),证实传递的过程当中没有问题,不过为何其余浏览器在弹出下载对话框的时候没有问题,而Firefox却出现了乱码呢?多是在弹出对话框的时候处理的方式不同吧!咱们百度看看!spa

针对这个问题,遇到的人仍是很多的,下面是我以为很是有借鉴做用的资源:.net

1:这篇博文解释的至关好,值得一看firefox

http://qixinglu.com/post/redisposition.html

2:这一篇也有必定的借鉴意义

http://my.oschina.net/iceman/blog/67541

3:下面是具体解决方案

http://f0rb.iteye.com/blog/1308579

http://www.cnblogs.com/stangray/archive/2010/06/28/1766884.html

http://blog.csdn.net/shixing_11/article/details/5858902

恩,看到这里我相信,无论明白不明白为何,只要动手实验实验,就能针对本身的状况,找到这个问题的解决方案了,关键就是如何按照要求写

"Content-Disposition","attachment;filename*=utf-8'zh_cn'文件名.xx"

个人解决方式以下(借鉴上面的解决方式):

                       //仅提供了部分代码,由于咱们已经明确问题的所在,知道修改那一部分了,(代码中downloadFileName 即表明 
String agent = (String)getRequest().getHeader("USER-AGENT"); if(agent != null && agent.toLowerCase().indexOf("firefox") > 0) { downloadFileName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?="; } else { downloadFileName = java.net.URLEncoder.encode(fileName, "UTF-8"); }*=utf-8'zh_cn'文件名.xx部分)*=utf-8'zh_cn'文件名.xx

 该段代码经我测试,经过了Firefox 36.0.1/IE8/Chrome 40.0.2214.93 m/360 7.1.1.322等浏览器的考验!

Firefox修改后的效果以下所示:

4:若是你感兴趣,英文还不错,能够看看下面的内容

http://blogs.msdn.com/b/ieinternals/archive/2010/06/07/content-disposition-attachment-and-international-unicode-characters.aspx

http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http

http://greenbytes.de/tech/tc2231/

 

很是感谢网络上无私的贡献者!