不同浏览器下载文件 中文名字乱码解决
来源:互联网 发布:mac 程序员必备软件 编辑:程序博客网 时间:2024/05/22 12:00
浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了。
首先,文件名作为参数保存Content-Disposition里也就是header头里,content-type指定的是响应文件在浏览器显示的编码,header头里的编码没法指定,浏览器不同,Content-Disposition值可以有以下几种编码格式 。
1. 直接urlencode:
Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm"
2. Base64编码:
Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?="
3. RFC2231规定的标准:
Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg
4. 直接ISO编码的文件名:
Content-Disposition: attachment;filename="测试.txt"
然后,各浏览器支持的对应编码格式为:
1. IE浏览器,采用URLEncoder编码
2. Opera浏览器,采用filename*方式
3. Safari浏览器,采用ISO编码的中文输出
4. Chrome浏览器,采用Base64编码或ISO编码的中文输出
5. FireFox浏览器,采用Base64或filename*或ISO编码的中文输出
new_filename = URLEncoder.encode(filename, "UTF8");
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
rtn = "filename=\"" + new_filename + "\"";
if (userAgent != null)
{
userAgent = userAgent.toLowerCase();
// IE浏览器,只能采用URLEncoder编码
if (userAgent.indexOf("msie") != -1)
{
rtn = "filename=\"" + new_filename + "\"";
}
// Opera浏览器只能采用filename*
else if (userAgent.indexOf("opera") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
// Safari浏览器,只能采用ISO编码的中文输出
else if (userAgent.indexOf("safari") != -1 )
{
rtn = "filename=\"" + new String(filename.getBytes("UTF-8"),"ISO8859-1") + "\"";
}
// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
else if (userAgent.indexOf("applewebkit") != -1 )
{
new_filename = MimeUtility.encodeText(filename, "UTF8", "B");
rtn = "filename=\"" + new_filename + "\"";
}
// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
else if (userAgent.indexOf("mozilla") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
}
目前,我测试的情况,在几个浏览器上都能正常输入中文文件名
但,也许浏览器不同版本,可能还会有乱码的情况.....
首先,文件名作为参数保存Content-Disposition里也就是header头里,content-type指定的是响应文件在浏览器显示的编码,header头里的编码没法指定,浏览器不同,Content-Disposition值可以有以下几种编码格式 。
1. 直接urlencode:
Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm"
2. Base64编码:
Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?="
3. RFC2231规定的标准:
Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg
4. 直接ISO编码的文件名:
Content-Disposition: attachment;filename="测试.txt"
然后,各浏览器支持的对应编码格式为:
1. IE浏览器,采用URLEncoder编码
2. Opera浏览器,采用filename*方式
3. Safari浏览器,采用ISO编码的中文输出
4. Chrome浏览器,采用Base64编码或ISO编码的中文输出
5. FireFox浏览器,采用Base64或filename*或ISO编码的中文输出
new_filename = URLEncoder.encode(filename, "UTF8");
// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的
rtn = "filename=\"" + new_filename + "\"";
if (userAgent != null)
{
userAgent = userAgent.toLowerCase();
// IE浏览器,只能采用URLEncoder编码
if (userAgent.indexOf("msie") != -1)
{
rtn = "filename=\"" + new_filename + "\"";
}
// Opera浏览器只能采用filename*
else if (userAgent.indexOf("opera") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
// Safari浏览器,只能采用ISO编码的中文输出
else if (userAgent.indexOf("safari") != -1 )
{
rtn = "filename=\"" + new String(filename.getBytes("UTF-8"),"ISO8859-1") + "\"";
}
// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出
else if (userAgent.indexOf("applewebkit") != -1 )
{
new_filename = MimeUtility.encodeText(filename, "UTF8", "B");
rtn = "filename=\"" + new_filename + "\"";
}
// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出
else if (userAgent.indexOf("mozilla") != -1)
{
rtn = "filename*=UTF-8''" + new_filename;
}
}
目前,我测试的情况,在几个浏览器上都能正常输入中文文件名
但,也许浏览器不同版本,可能还会有乱码的情况.....
阅读全文
0 0
- 不同浏览器下载文件 中文名字乱码解决
- 下载文件时兼容不同浏览器中文乱码解决
- 解决Tomcat下载中文名字文件乱码
- servlet 下载文件名字 中文乱码 解决
- SpringMvc下载文件,判断不同浏览器的中文名字显示
- 解决不同浏览器上中文文件名的下载乱码问题
- Java strtus2文件下载不同浏览器文件名中文乱码处理
- Firefox 火狐 浏览器下载文件文件名中文乱码解决
- java实现浏览器下载文件,并解决兼容各浏览器的文件下载中文乱码
- ie 火狐 谷歌 浏览器下载,文件名字乱码,空格,不兼容问题解决
- 文件下载解决中文乱码
- 文件下载中文乱码解决
- 文件下载文件名中文乱码 浏览器兼容问题
- 解决多浏览器文件下载乱码
- 在ie浏览器下载文件乱码解决
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器上中文文件名的上传/下载乱码问题
- HDU 2017 多校联合训练赛4 4003 6069 Counting Divisors 素数筛和素因数分解
- 计算机网络保研面试题
- SetConsoleTextAttribute的使用
- linux命令备忘
- spring boot-2(运行原理)
- 不同浏览器下载文件 中文名字乱码解决
- win7系统 PLsql 32位安装后,一直报错ORA-ORA-12151
- 学习日记-魅族2 3手机root
- 大数字符串的四则运算之加法----Java代码实现
- 前序遍历+中序遍历=后序遍历 中序遍历+后序遍历=前序遍历
- 24. Swap Nodes in Pairs(Java)
- HDU 6058 Kanade's sum
- POJ 1651
- 实验图数据集查找总结 Graph DataSet