IE下载时中文文件名乱码解决
下载时会通过添加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下载时中文文件名乱码解决相关推荐
- 解决浏览器下载文件时中文文件名乱码的问题
解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...
- java 下载文件的文件名乱码_JAVA 文件下载时的文件名乱码解决
JAVA 文件下载时的文件名乱码解决 if(null != agent && -1 != agent.indexOf("MSIE")){ filename = UR ...
- linux 文件夹 乱码,linux中文文件名乱码解决
原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...
- 附件下载,中文文件名乱码如何解决???
问: 我写了个程序,里面有文件要作为附件下载,英文文件名都正常,但中文文件名就会乱码,不知道如何解决,望高手指点. 代码如下: ============================= Respon ...
- 从服务上下载下的日志文件,用UltraEdit打开时中文是乱码解决方法
我刚才从服务器上下载来的日志文件,后缀是.log,用UltraEdit打开时中文全是乱码,解决方法: 1.高级--->配置---->常规 里的 "自动检测到UTF-8文件&quo ...
- teleport ultra php,解决Teleport Ultra下载的中文文件名乱码
最近用Teleport Ultra下个整站,但是发现Teleport Ultra下载下来的文件中文名是乱码,其实也不怪Teleport Ultra,因为它把文件名用utf8格式保存,而简体版windo ...
- ASP.NET实现下载的中文文件名乱码处理
引用:http://dotnet.chinaitlab.com/ASPNET/35677.html 早几天在系统中添加文件管理的下载功能, 要求在ASPX文件中实现, 以进行权限的控件,于是添加下列代 ...
- Zuul上传文件,中文文件名乱码解决办法
问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuul服务,上传中文名字的文件,文件名会出现乱码,最终导致上传失败,如果上传英文名字的文件,没有任何问题.怀疑网 ...
- java导出excel 乱码_java导出excel时出现文件名乱码解决方法
java解决导出Excel时文件名乱码的方法示例:(推荐:java视频教程)String agent = request.getHeader("USER-AGENT").toLow ...
- 解决浏览器下载文件 中文名字乱码解决
浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了. 首先,文件名作为参数保存Content-Dispositi ...
最新文章
- Hsiaoyang: Google与站点地图Sitemap
- 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...
- C++自定义sobel求梯度
- php 公众号验证回调方法_如何进行公众号文章收集 两种收集方法详解
- 最低通行费(信息学奥赛一本通-T1287)
- 一图胜千言,这本交互式线代教科书让你分分钟理解复杂概念,佐治亚理工出品...
- C#托管代码调用C++非托管代码
- 「CJOJ2573」Snake vs Block
- WinFom中经典小游戏(含源码)
- 【RobotStudio学习笔记】(五)工具数据
- python装饰器系列(一)
- 技术重要还是能力重要?和大学生的MSN讨论记录
- 不经意传输算法 效果
- C#使用NPIO读写excle,并生成多个表单
- winpe加载raid_WinPE添加RAID驱动的步骤
- 给神经网络加入先验知识!
- #10094. 「一本通 3.5 练习 2」消息的传递
- class.forName()详解
- JavaScript学习攻略
- Windows XP 下如何安装 SQL server 2000 企业版