Windows下IE浏览器文件下载
Windows下IE浏览器文件下载
微软系浏览器的内核特立独行,下载文件的文件名编码格式不同于其他浏览器,经常会造成乱码的问题。通过HttpServletRequest
获取到对应的User-Agent
来判断浏览器的类型。如下为chrome浏览器在MacOS下的User-Agent。
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
IE10(包含IE10)以下的User-Agent都比较接近,都统一包含MSIE,只是其版本不一致。
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) //IE8
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) //IE9
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0) //IE10
而IE11不同,MSIE从IE11的User-Agent中消失了,可以通过Trident来判断。
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
直接下载文件时会将文件名写入请求头,而此时,IE浏览器就会出现下载的文件名乱码的问题。
response.setHeader("Content-Disposition", "attachment;fileName=" + filename);
为了解决IE下载文件文件名乱码的错误,通过上述的User-Agent来判断是否为IE浏览器,如果为IE浏览器,则对文件名字进行URLEncoder.encode(filename, "utf-8")
处理。
//解决ie下载时文件名乱码的问题
public static String getDownloadFileName(String filename, final HttpServletRequest request){String agent = request.getHeader("User-Agent").toUpperCase();String realName = null;//判断是否是ie浏览器if (agent.contains("MSIE") || agent.contains("TRIDENT")) { realName = URLEncoder.encode(filename, "utf-8");}else{realName = new String(filename.getBytes(), StandardCharsets.ISO_8859_1);}return realName;
}
此外,在IE浏览器中下载压缩文件时,解压缩后的文件名也会出现乱码现象。
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
通过查看源码,可以发现ZipOutputStream
的构造方法默认使用UTF-8
格式。
/*** Creates a new ZIP output stream.** <p>The UTF-8 {@link java.nio.charset.Charset charset} is used* to encode the entry names and comments.** @param out the actual output stream*/
public ZipOutputStream(OutputStream out) {this(out, StandardCharsets.UTF_8);
}
而IE浏览器下对中文的编码默认为GBK
,此时需要针对于IE指定特定格式的编码GBK。
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream(), Charset.forName("GBK"));
此时下载的文件解压之后就不会有乱码的现象。
Windows下IE浏览器文件下载相关推荐
- windows下火狐浏览器中配置kerberos客户端
1.环境 1.操作系统:windows 2. CDH版本信息: 5.16.2-1.cdh5.16.2.p0.8 3.浏览器:火狐浏览器 4.kdc客户端:kfw-4.1-amd64 2.安装火狐浏览器 ...
- 从Docker在Linux和Windows下的区别简单理解Docker的层次结构
上篇文章我们成功在Windows下安装了Docker,输出了一个简单的Hello World程序.本文中我们将利用Docker已有的云端镜像training/webapp来发布一个简单Python的W ...
- 用Javascript代码实现浏览器菜单命令(以下代码在 Windows XP下的浏览器中调试通过
每当我们看到别人网页上的打开.打印.前进.另存为.后退.关闭本窗口.禁用右键等实现浏览器命令的链接,而自己苦于不能实现时,是不是感到很遗憾?是不是也想实现?如果能在网页上能实现浏览器的命令,将是多么有 ...
- 苹果或推出Windows版Safari浏览器;微软正“取下”Chromium版Edge浏览器的Beta标签;亚马逊申请新专利……...
关注并标星星CSDN云计算 速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周两次,打卡即read 更快.更全了解泛云圈精彩news go ...
- 解决 windows 下浏览器无法上网,QQ/微信正常上网
## 解决 windows 下浏览器无法上网,QQ/微信正常上网 ## 解决 windows 下浏览器无法解析DNS配置 > 注意:本处只**提供一种解决思路,并不代表所有问题都能被解决,可以 ...
- Windows下vc开发chrome浏览器工程的一点粗浅理解和封装
Windows下cef开发和封装 一,封装包组成说明 二,浏览器工程集成步骤 1,创建一个合适的vc工程. 2,将工程设置成unicode,静态库使用mfc. 3,将SDK目录拷贝到合适的路径下(例如 ...
- 《Windows 8 权威指南》——1.2 Windows 8平板模式下IE浏览器网页
本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.2节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...
- windows下定时自动打开某网页并在访问结束后自动关闭浏览器
2019独角兽企业重金招聘Python工程师标准>>> 思路:使用windows下的bat脚本文件执行"打开网址->等待->关闭浏览器"的操作:使用w ...
- 在linux下从firefox导入windows的收藏夹,1、Ubuntu linux下同步windows火狐foxfire 浏览器收藏夹问题...
最近在ubuntu系统中使用自带的firefox浏览器,发现有一些问题,比如登陆后,书签,历史记录等,原本在windows下同步的数据无法同步,添加书签的功能也无法使用. 经过查询资料后得知,unbu ...
- [Python] windows下360急速浏览器获取URL的Headers
目的:windows下360急速浏览器获取URL的Headers 环境: 系统:windows 环境:360chrome 步骤: 1.使用浏览器打开url,并开启调试模式 工具->开发者调试工具 ...
最新文章
- How to scroll the window using JQuery $.scrollTo() function
- word打开老是配置进度_小白教程 | office出现配置进度框,怎么办?
- iOS开发中用到的第三方库概览
- 特斯拉回应提车考试:仅作为丰富交付体验的“选修”活动
- 使用tensorflow object detection api训练自己的数据集
- 安卓中资源ID的问题
- Servlet 生命周期的过程分析 图解
- linux连接本地文件夹,llinux除了软连接本地文件夹同步:mount
- zen brush 2 android,zen brush2
- 关于一些3D数学基础的习题,感兴趣的同行进来帮帮忙啦。
- mousewheel事件
- 开源dns软件PowerDNS BIND9 mydns
- Latex IEEEtran第一次总结
- Windows 键盘按键 测试
- OpenStack 快速进阶教程
- MATLAB deconvwnr(维纳滤波)应用
- 时间序列的平稳性与差分法
- linux 常用命令——MySql 5.7添加用户、删除用户与授权
- 抢票原理通俗解释,​候补购票是什么?你还在交智商税吗?
- Linux上使用ZFS