java文件下载的文件名乱码问题的解决_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java文件下载的文件名乱码问题的解决

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

 2014/7/16 18:57:09  qian0021514578  程序员俱乐部  我要评论(0)
  • 摘要:在Java的web开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。对于这个问题,不同的浏览器,解决的方法不太一样。IE的话,通过URLEncoder对filename进行UTF8编码。而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。示例代码(通过测试):[java]viewplaincopyif(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE"
  • 标签:解决 文件 Java 下载 问题 乱码问题 文件名

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

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

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

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

示例代码(通过测试):

[java] view plaincopy
    class="dp-j">
  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");??
  5. }?

文件下载功能在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);
}
发表评论
用户名: 匿名