java文件下载的文件名乱码问题的解决

在Java的web开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。

对于这个问题,不同的浏览器,解决的方法不太一样。

IE的话,通过URLEncoder对filename进行UTF8编码。

而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。

示例代码(通过测试):

[java] view plain copy
  1. if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  
  2.     filename = URLEncoder.encode(filename, "UTF-8");  
  3. else {  
  4.     filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");  

文件下载功能在FireFox和IE中的差异(当下载文件文件名中出现空格时,在FireFox中文件名会被截断)
最近在做文件下载时发现,当下载的文件名中出现空格的时候在IE中可以正常下载,在FireFox中会出现文件名被截断的情况(如当文件名为:新建 文件夹.txt时,在IE中正常下载,在FireFox中则只会显示"新建"),
解决思路:首先判断使用的浏览器,然后再根据不同的浏览器做相应的处理,即可解决文件下载时文件名乱码和文件名被截断问题。
具体解决办法如下:

String agent = (String)request.getHeader("USER-AGENT");
if(agent != null && agent.indexOf("MSIE") == -1) {
// FF
String enableFileName = "=?UTF-8?B?" + (new String (Base64.encodeBase64(flieName.getBytes("UTF-8")))) + "?=";
response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName);
}else {
// IE
String enableFileName = new String(flieName.getBytes("GBK"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值