`

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

    博客分类:
  • java
阅读更多

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

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

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

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

示例代码(通过测试):

  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);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics