各浏览器下载文件名不乱码的解决办法
2018-06-18 02:27:26来源:未知 阅读 ()
在项目中发现,使用Safari下载中文名文件的时候,下载的文件名是乱码的问题。但是这个问题在IE,Firefox,Chrome中是没有的。原先以为是Safari的bug,但是细细研究之下你会发现这个简单的文件下载问题在HTTP协议里经历了多少波折。
这里直接贴出java代码
/** * <pre> * 浏览器下载文件时需要在服务端给出下载的文件名,当文件名是ASCII字符时没有问题 * 当文件名有非ASCII字符时就有可能出现乱码 * * 这里的实现方式参考这篇文章 * http://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/ * * 最终设置的response header是这样: * * Content-Disposition: attachment; * filename="encoded_text"; * filename*=utf-8''encoded_text * * 其中encoded_text是经过RFC 3986的“百分号URL编码”规则处理过的文件名 * </pre> * @param response * @param filename * @return */ public static void setFileDownloadHeader(HttpServletResponse response, String filename) { String headerValue = "attachment;"; headerValue += " filename=\"" + encodeURIComponent(filename) +"\";"; headerValue += " filename*=utf-8''" + encodeURIComponent(filename); response.setHeader("Content-Disposition", headerValue); } /** * <pre> * 符合 RFC 3986 标准的“百分号URL编码” * 在这个方法里,空格会被编码成%20,而不是+ * 和浏览器的encodeURIComponent行为一致 * </pre> * @param value * @return */ public static String encodeURIComponent(String value) { try { return URLEncoder.encode(value, "UTF-8").replaceAll("\\+", "%20"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } }
转载自:https://segmentfault.com/a/1190000005994758
感谢大神解决长久以来的问题。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:6.3.4 方法引用
- jdk各个版本下载 2020-06-11
- Maven安装与配置 2020-06-09
- java环境教程:Tomcat下载,安装,设置为Windows服务,启动 2020-06-09
- 解决IDEA Maven下载依赖包速度慢问题 2020-06-05
- Java电子书高清PDF集合免费下载 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
