下载时会通过添加header

Content-Disposition: attachment;filename=xxx

来达到浏览器弹窗下载。

然后根据rfc2616,要求header使用iso-8859-1进行编码,于是遇到中文后一般会发生这种情况

String fname="中文";
String header=new String(fname.getBytes("UTF-8"),"ISO-8859-1");
response.addHeader("Content-Disposition: attachment;filename="+header);

因为rfc2616没有把Content-Disposition添加进标准中,所以各个浏览器对这个header的实现各不相同,
低版本IE:

request-->服务器编码文件名(一般UTF8)-->ISO-8859-1

response-->ISO-8859-1-->本机编码(中文系统就是GBK)

Chrome:

response-->ISO-8859-1-->UTF-8

这样的话Chrome就貌似正常了,但是如果服务器的编码是GBK,照样扑街。
对此,一般是在服务器编码header的时候根据UA分别编码。

后来RFC6266发布,将Content-Disposition添加到header标准,语法

content-disposition = "Content-Disposition" ":"disposition-type *( ";" disposition-parm )disposition-type    = "inline" | "attachment" | disp-ext-type; case-insensitivedisp-ext-type       = tokendisposition-parm    = filename-parm | disp-ext-parmfilename-parm       = "filename" "=" value| "filename*" "=" ext-valuedisp-ext-parm       = token "=" value| ext-token "=" ext-valueext-token           = <the characters in token, followed by "*">Defined in [RFC2616]:token         = <token, defined in [RFC2616], Section 2.2>quoted-string = <quoted-string, defined in [RFC2616], Section 2.2>value         = <value, defined in [RFC2616], Section 3.6>; token | quoted-stringDefined in [RFC5987]:ext-value   = <ext-value, defined in [RFC5987], Section 3.2>

同时给出一个兼容性方案

Content-Disposition:attachment;filename="8859-1编码的文件名";filename*=utf-8''UTF8编码的文件名

这是因为旧版本浏览器只识别

filename

而新版本浏览器会使用

filename*

忽略其他部分。

如此一来,不在需要根据UA,只需要直接同时提交2种编码文件名,新旧浏览器直接支持,同时也是符合http协议

        ByteArrayOutputStream boas = null;HttpHeaders header = new HttpHeaders();String filename = "明细清单.xls";String filename8859 = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);String filenameutf8 = null;try {filenameutf8 = URLEncoder.encode(filename, StandardCharsets.UTF_8.name());} catch (UnsupportedEncodingException e) {e.printStackTrace();}header.add("Content-Type", "application/vnd.ms-excel");header.add("Content-Disposition", "attachment;filename=" + filename8859 + ";filename*=utf-8''" + filenameutf8);return new ResponseEntity<>(boas.toByteArray(), header, HttpStatus.OK);

IE下载时中文文件名乱码解决相关推荐

  1. 解决浏览器下载文件时中文文件名乱码的问题

    解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...

  2. java 下载文件的文件名乱码_JAVA 文件下载时的文件名乱码解决

    JAVA 文件下载时的文件名乱码解决 if(null != agent && -1 != agent.indexOf("MSIE")){ filename = UR ...

  3. linux 文件夹 乱码,linux中文文件名乱码解决

    原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...

  4. 附件下载,中文文件名乱码如何解决???

    问: 我写了个程序,里面有文件要作为附件下载,英文文件名都正常,但中文文件名就会乱码,不知道如何解决,望高手指点. 代码如下: ============================= Respon ...

  5. 从服务上下载下的日志文件,用UltraEdit打开时中文是乱码解决方法

    我刚才从服务器上下载来的日志文件,后缀是.log,用UltraEdit打开时中文全是乱码,解决方法: 1.高级--->配置---->常规 里的 "自动检测到UTF-8文件&quo ...

  6. teleport ultra php,解决Teleport Ultra下载的中文文件名乱码

    最近用Teleport Ultra下个整站,但是发现Teleport Ultra下载下来的文件中文名是乱码,其实也不怪Teleport Ultra,因为它把文件名用utf8格式保存,而简体版windo ...

  7. ASP.NET实现下载的中文文件名乱码处理

    引用:http://dotnet.chinaitlab.com/ASPNET/35677.html 早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代 ...

  8. Zuul上传文件,中文文件名乱码解决办法

    问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuul服务,上传中文名字的文件,文件名会出现乱码,最终导致上传失败,如果上传英文名字的文件,没有任何问题.怀疑网 ...

  9. java导出excel 乱码_java导出excel时出现文件名乱码解决方法

    java解决导出Excel时文件名乱码的方法示例:(推荐:java视频教程)String agent = request.getHeader("USER-AGENT").toLow ...

  10. 解决浏览器下载文件 中文名字乱码解决

    浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了. 首先,文件名作为参数保存Content-Dispositi ...

最新文章

  1. Hsiaoyang: Google与站点地图Sitemap
  2. 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...
  3. C++自定义sobel求梯度
  4. php 公众号验证回调方法_如何进行公众号文章收集 两种收集方法详解
  5. 最低通行费(信息学奥赛一本通-T1287)
  6. 一图胜千言,这本交互式线代教科书让你分分钟理解复杂概念,佐治亚理工出品...
  7. C#托管代码调用C++非托管代码
  8. 「CJOJ2573」Snake vs Block
  9. WinFom中经典小游戏(含源码)
  10. 【RobotStudio学习笔记】(五)工具数据
  11. python装饰器系列(一)
  12. 技术重要还是能力重要?和大学生的MSN讨论记录
  13. 不经意传输算法 效果
  14. C#使用NPIO读写excle,并生成多个表单
  15. winpe加载raid_WinPE添加RAID驱动的步骤
  16. 给神经网络加入先验知识!
  17. #10094. 「一本通 3.5 练习 2」消息的传递
  18. class.forName()详解
  19. JavaScript学习攻略
  20. Windows XP 下如何安装 SQL server 2000 企业版

热门文章

  1. 广东省汕尾市谷歌卫星地图下载
  2. 致凯利定理(Cayley公式)
  3. 招商证券港股通业务评测答案
  4. Android简易实战教程--第三十七话《NotifiCation》
  5. GROMACS .mdp 选项翻译及笔记
  6. android快牙原理,快牙是什么 快牙使用原理及使用教程
  7. 简单图片木马的生成与利用
  8. 前端食堂技术周刊第 40 期:HTTP/3、WebContainers 登陆 Firefox、Remix Conf 2022、VueConf US 2022
  9. SQL server日志清理
  10. DM8 Linux服务注册