解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
来源:互联网 发布:php 先use namespace 编辑:程序博客网 时间:2024/05/09 14:18
最近做项目,采用Spring MVC做控制层,下载文件的文件名总是在主流浏览器上显示乱码,Firfox不是乱码了,IE下又成了乱码。也是烦,IE总是独树一帜,没办法,只能让程序去适应,在网上也搜索了很多,但是解决的不理想,主要是IE11作为主流浏览器后,很多人之前提出的方案都失效了。
那么咱们总结一下,最终的下载代码如下:
简单来说,之前使用request获取header中的user-agent,通过MSIE关键字来判断是否是IE浏览器,如果是IE浏览器,使用utf-8对文件名编码就可以了。然而,IE11的user-agent已经没有了MSIE关键字了,下面就是IE11的request header:
可以看出,MSIE关键字已经没有,但是咱们还可以使用Trident关键字来判断
然而,我在使用win10上的Edge浏览器进行下载时,仍然是乱码,仔细看,原来Edge浏览器的user-agent又发生了变化,MSIE和Trident关键字都没有了,增加了Edge关键字,当前我用电脑还是win8,这里就不贴出最新的Edge浏览器的request header了,感兴趣的可以进开发者模式看一下。
终极解决方案
好了,我们现在需要使用Trident和Edge关键字来判断是否是微软的浏览器(微软抛弃了IE,开始使用Edge了),代码如下:
那么在下载时,首先判断是否是微软的浏览器,如果是,用utf-8对文件名进行编码,如果不是,使用万能解决乱码代码:那么咱们总结一下,最终的下载代码如下:
这样就可以在目前IE8-IE11、Edge、Firefox和chrome浏览器下载文件时,中文字符不再乱码了。
Firefox下载英文+中文组合的文件名的问题
另外,有一个需要注意的地方就是这句话:
设置response的Content-disposition项时,filename的值要加上双引号,如果不加双引号,在Firefox下载文件时,如果文件名是英文+中文的组合,比如:dota2的新手攻略.docx,这个文件在Firefox下载时,下载下来的文件名只有dota2了。只有加了双引号后,文件名才和代码设置的文件名一致。因为这个双引号是在字符串里,所需需要加反斜杠\来进行转义。阅读全文
1 0
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件,文件名乱码的问题
- Firefox 火狐 浏览器下载文件文件名中文乱码解决
- js下载文件以及下载文件名乱码问题的解决
- 解决火狐浏览器下载文件文件名乱码的问题
- 解决Firefox下载文件名乱码
- java 下载文件解决文件名乱码问题
- 解决struts2在(IE,Firefox)下载文件名乱码问题。
- 解决struts2在(IE,Firefox)下载文件名乱码问题
- http 下载文件中文文件名在 firefox 下乱码问题
- 文件下载(解决中文文件名下载乱码问题) 收集
- 解决不同浏览器上中文文件名的下载乱码问题
- PHP解决IE浏览器下载文件名乱码问题
- 下载文件firefox中文文件名乱码
- 解决PHP在IE浏览器下载文件,中文文件名乱码问题
- 解决Java下载文件,文件名包含中文在IE浏览器乱码问题
- AndroidManifest.xml反编译工具
- 求一个数组的最大子序列
- POJ 3356 AGTC(dp之公共最长子序列)
- 【Java集合源码剖析】HashMap源码剖析
- 容易忘记的命令
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 在移动设备中创建ArcGIS API for JavaScript地图应用程序
- 二叉树的查找
- 二叉树先序、中序和后序遍历
- css 居中布局
- vue表单验证插件 vue-verify-plugin V2.0
- css+js实现下拉菜单栏
- 机器学习-模型优化
- tomcat管理页面403 Access Denied的解决方法