不同浏览器上中文文件名的下载乱码问题
来源:互联网 发布:淘宝亲亲节 编辑:程序博客网 时间:2024/05/21 19:00
参考文章:
http://java-xp.iteye.com/blog/903048
http://www.iefans.net/xiazai-wenjian-http-bianma-content-disposition/ (作者:iefans)
http://tools.ietf.org/html/rfc6266
CONTENT_DISPOSITION格式
在服务端设置response的CONTENT_DISPOSITION属性后,可以让浏览器弹出文件下载框,代码如下:
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedfileName + "\"");
当encodedfileName出现中文字符时,需要针对不同的浏览器设置不同的编码方式。目前CONTENT_DISPOSITION支持以下几种编码方式:
1. UrlEncode
2. Base64
3. RFC2231
4. ISO编码
目前主流浏览器支持的格式如下(未验证过):
1. IE浏览器,采用URLEncoder编码
2. Opera浏览器,采用filename*方式
3. Safari浏览器,采用ISO编码的中文输出
4. Chrome浏览器,采用Base64编码或ISO编码的中文输出
5. FireFox浏览器,采用Base64或filename*或ISO编码的中文输出
因此,兼容所有浏览器的服务端代码如下(取自SpringSide项目):
boolean isMSIE = (agent != null && agent.toUpperCase().indexOf("MSIE") != -1);if (isMSIE) { encodedfileName = Encodes.urlEncode(fileName);} else { encodedfileName = new String(fileName.getBytes(), Charsets.ISO_8859_1);}response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedfileName + "\"");
但是,根据rfc6266中推荐的范例,用filename+filename*的形式才是推荐的。根据范例,HttpHeaders.CONTENT_DISPOSITION的内容如下:
Content-Disposition: attachment; filename="$encoded_fname"; filename*=utf-8''$encoded_fname其中,$encoded_fname指的是将 UTF-8 编码的原始文件名按照 RFC 3986 进行百分号 urlencode 后得到的。这几行也可以合并为一行,推荐使用一个空格隔开。
0 0
- 解决不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载/导出乱码问题(Java)
- 兼容不同浏览器上中文文件名的下载
- 解决不同浏览器上中文文件名的下载乱码问题php验证可行的测试过ie ff 和chrome的
- [浏览器]IE下载中文文件名乱码问题
- 不同浏览器下载文件名乱码
- Java strtus2文件下载不同浏览器文件名中文乱码处理
- 下载中文文件名的乱码问题
- java下载文件文件名针对不同浏览器乱码,文件名中存在括号等乱码问题
- 下载中文文件名乱码问题
- 使用XFire进行web services开发有三种方式:
- Linux启动顺序
- 11 CI中的【模型】 控制器 视图
- LeetCode (26) LRU Cache
- 360 2016届实习生招聘笔试 综合题
- 不同浏览器上中文文件名的下载乱码问题
- Android“再按一次退出程序”的具体实现
- 第八周项目1(1)-复数类的运算重载
- Linux平台总线驱动设备模型
- 从安装java 到hadoop 到spark 的全套步骤,很详细, 高档大气上档次
- 正则表达式-元字符
- leetcode 日经贴,Cpp code -Letter Combinations of a Phone Number
- 杭电 HDU ACM 1709 The Balance
- maven实战 学习记录- 仓库