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浏览器文件下载相关推荐

  1. windows下火狐浏览器中配置kerberos客户端

    1.环境 1.操作系统:windows 2. CDH版本信息: 5.16.2-1.cdh5.16.2.p0.8 3.浏览器:火狐浏览器 4.kdc客户端:kfw-4.1-amd64 2.安装火狐浏览器 ...

  2. 从Docker在Linux和Windows下的区别简单理解Docker的层次结构

    上篇文章我们成功在Windows下安装了Docker,输出了一个简单的Hello World程序.本文中我们将利用Docker已有的云端镜像training/webapp来发布一个简单Python的W ...

  3. 用Javascript代码实现浏览器菜单命令(以下代码在 Windows XP下的浏览器中调试通过

    每当我们看到别人网页上的打开.打印.前进.另存为.后退.关闭本窗口.禁用右键等实现浏览器命令的链接,而自己苦于不能实现时,是不是感到很遗憾?是不是也想实现?如果能在网页上能实现浏览器的命令,将是多么有 ...

  4. 苹果或推出Windows版Safari浏览器;微软正“取下”Chromium版Edge浏览器的Beta标签;亚马逊申请新专利……...

    关注并标星星CSDN云计算 速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周两次,打卡即read   更快.更全了解泛云圈精彩news   go ...

  5. 解决 windows 下浏览器无法上网,QQ/微信正常上网

    ##  解决 windows 下浏览器无法上网,QQ/微信正常上网 ## 解决 windows 下浏览器无法解析DNS配置 > 注意:本处只**提供一种解决思路,并不代表所有问题都能被解决,可以 ...

  6. Windows下vc开发chrome浏览器工程的一点粗浅理解和封装

    Windows下cef开发和封装 一,封装包组成说明 二,浏览器工程集成步骤 1,创建一个合适的vc工程. 2,将工程设置成unicode,静态库使用mfc. 3,将SDK目录拷贝到合适的路径下(例如 ...

  7. 《Windows 8 权威指南》——1.2 Windows 8平板模式下IE浏览器网页

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.2节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...

  8. windows下定时自动打开某网页并在访问结束后自动关闭浏览器

    2019独角兽企业重金招聘Python工程师标准>>> 思路:使用windows下的bat脚本文件执行"打开网址->等待->关闭浏览器"的操作:使用w ...

  9. 在linux下从firefox导入windows的收藏夹,1、Ubuntu linux下同步windows火狐foxfire 浏览器收藏夹问题...

    最近在ubuntu系统中使用自带的firefox浏览器,发现有一些问题,比如登陆后,书签,历史记录等,原本在windows下同步的数据无法同步,添加书签的功能也无法使用. 经过查询资料后得知,unbu ...

  10. [Python] windows下360急速浏览器获取URL的Headers

    目的:windows下360急速浏览器获取URL的Headers 环境: 系统:windows 环境:360chrome 步骤: 1.使用浏览器打开url,并开启调试模式 工具->开发者调试工具 ...

最新文章

  1. How to scroll the window using JQuery $.scrollTo() function
  2. word打开老是配置进度_小白教程 | office出现配置进度框,怎么办?
  3. iOS开发中用到的第三方库概览
  4. 特斯拉回应提车考试:仅作为丰富交付体验的“选修”活动
  5. 使用tensorflow object detection api训练自己的数据集
  6. 安卓中资源ID的问题
  7. Servlet 生命周期的过程分析 图解
  8. linux连接本地文件夹,llinux除了软连接本地文件夹同步:mount
  9. zen brush 2 android,zen brush2
  10. 关于一些3D数学基础的习题,感兴趣的同行进来帮帮忙啦。
  11. mousewheel事件
  12. 开源dns软件PowerDNS BIND9 mydns
  13. Latex IEEEtran第一次总结
  14. Windows 键盘按键 测试
  15. OpenStack 快速进阶教程
  16. MATLAB deconvwnr(维纳滤波)应用
  17. 时间序列的平稳性与差分法
  18. linux 常用命令——MySql 5.7添加用户、删除用户与授权
  19. 抢票原理通俗解释,​候补购票是什么?你还在交智商税吗?
  20. Linux上使用ZFS

热门文章

  1. python定义一个整数变量_Python变量和数据类型详解
  2. 客户消费积分管理系统编写笔记
  3. 11g OCM 考试感悟
  4. CG标准函数库——数学函数(GPU编程与CG语言之阳春白雪下里巴人)
  5. 人大金仓(Kingbase)数据库迁移——使用大金仓数据库迁移工具进行迁移
  6. tomcat 日志拆分
  7. Hexo博客使用友盟+CNZZ统计页面访问次数
  8. js判断鼠标单击或者双击事件
  9. OpenGL基础入门及准备
  10. Unity获取物体下的子物体+只获取子物体