Java下载文件,文件名中文乱码问题
2016-06-28 13:21
621 查看
在Java的web开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。
对于这个问题,不同的浏览器,解决的方法不太一样。
IE的话,通过URLEncoder对filename进行UTF8编码。
而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。
示例代码(通过测试):
所以更稳妥的方法是:
附:获取浏览器user-agent的方法
参考文章:java文件下载文件名乱码
java文件下载的文件名乱码问题的解决
java下载文件时文件名乱码问题解决办法
对于这个问题,不同的浏览器,解决的方法不太一样。
IE的话,通过URLEncoder对filename进行UTF8编码。
而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了。
示例代码(通过测试):
/** * 下载文件名中含有中文的处理 * @param req * @param headName * @return * @throws UnsupportedEncodingException */ public static String encodeFileName(HttpServletRequest req, String headName) throws UnsupportedEncodingException { String filename="";//IE9之前包括IE9都包含MSIE;IE10之后都包含Trident;edge浏览器包含Edge String userAgent=req.getHeader("User-Agent"); if (userAgent.contains("MSIE") ||userAgent.contains("Trident")||userAgent.contains("Edge")) { filename = URLEncoder.encode(headName, "UTF-8"); } else { filename = new String(headName.getBytes("UTF-8"), "ISO8859-1"); } return filename; }另外:IE6下注意中文文字不能超过超过17个。
所以更稳妥的方法是:
/** * 下载文件名中含有中文的处理 * @param req * @param headName * @return * @throws UnsupportedEncodingException */ public static String encodeFileName(HttpServletRequest req, String headName) throws UnsupportedEncodingException { String filename="";//IE9之前包括IE9都包含MSIE;IE10之后都包含Trident;edge浏览器包含Edge String userAgent=req.getHeader("User-Agent"); if (userAgent.contains("MSIE") ||userAgent.contains("Trident")||userAgent.contains("Edge")) { if(filename.length()>150){//解决IE 6.0 bug filename=new String(headName.getBytes("UTF-8"),"ISO-8859-1"); }else{ filename = URLEncoder.encode(headName, "UTF-8"); } } else { filename = new String(headName.getBytes("UTF-8"), "ISO8859-1"); } return filename; }不过由于IE6基本已经退出历史舞台,所以用第一种方法也基本上是没问题的。
附:获取浏览器user-agent的方法
参考文章:java文件下载文件名乱码
java文件下载的文件名乱码问题的解决
java下载文件时文件名乱码问题解决办法
相关文章推荐
- Linux下修改MySQL编码的方法
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#读取中文文件出现乱码的解决方法
- cmd模式下中文乱码的解决方法(注册表)
- 解决mysql5中文乱码问题的方法
- mysql命令提示行连接乱码的解决
- 解决Java程序使用MySQL时返回参数为乱码的示例教程
- EBS xml publisher中文乱码问题及解决办法
- ExtJS中文乱码之GBK格式编码解决方案及代码
- Jquery乱码的一次解决过程 图解教程
- 解决realplayer11中文正式版网页右键乱码问题embed_cn.dll
- 解决MySQL客户端输出窗口显示中文乱码问题的办法
- 计算机中的字符串编码、乱码、BOM等问题详解
- php url地址栏传中文乱码解决方法集合
- 常见php与mysql中文乱码问题解决办法
- PHP附件下载中文名称乱码的解决方法
- PHP使用PDO操作数据库的乱码问题解决方法
- php+AJAX传送中文会导致乱码的问题的解决方法
- 网站开发防止中文乱码需要了解的codepage的重要性小结