文件下载文件名乱码的几个问题

Java Web后端做文件的下载,各个浏览器之间有兼容性问题,下载文件的文件名可能有乱码,下面总结几个乱码问题和常见解决办法:

firefox文件名乱码的问题:

一般下载文件,都会指明Content-disposition,形如下

response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName,"UTF-8")+".txt");

但是这在firefox下,下载的文件名还是会乱码,这是因为firefox严格按照RFC的规定实现,对应的constent-disposition,是如下的格式:

response.setHeader("Content-disposition", "attachment;filename*=utf-8'zh_cn'"+URLEncoder.encode(fileName,"UTF-8")+".txt");

所以对于不同的浏览器,就有判断了:

String userAgent=(String)request.getHeader("USER-AGENT"); 
if(useAgent.toLowerCase().contain("firefix")){
    response.setHeader("Content-disposition", "attachment;filename*=utf-8'zh_cn'"+URLEncoder.encode(fileName,"UTF-8")+".txt");
}else{
    response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName,"UTF-8")+".txt");
}

中英文组合文件名在firefox下载显示不全

解决办法是在fileName外面包一层"然后因为引号转移,需要加斜杠:

response.setHeader("Content-disposition","attachment;filename=\"" + fileName + "\""); 

空格encode之后变成+号的问题

需要在encode之后,手动对+号替换,替换回urlencode的空格,也就是%20

fileName.replaceAll("+","%20");

总结

以上列举出来的,都是一些小技巧,我写完后觉得,如果要彻底解决文件名乱码的问题,最好的办法,还是认真对每一个浏览器做好针对性的解决办法,做成一个工具类。
其次是我上面写到的还是太少,更多内容,更细致的内容,还请看参考部分的博客,质量都很高

参考

  1. 不同浏览器上中文文件名的下载问题
  2. Firefox下载文件时中文名乱码问题
  3. http下载文件,中文文件名在firefox下乱码问题
  4. response.setHeader()的用法
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值