在Java的web开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。
对于这个问题,不同的浏览器,解决的方法不太一样。
IE的话,通过URLEncoder对filename进行UTF8编码。
而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。
示例代码(通过测试):
[java] view plaincopy文件下载功能在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); }