解决struts2 下载中文名称乱码问题 适应不同三大主流浏览器 chrome28.0.1500.95、 firefox 23.0.1 、 IE11
2013-09-29 15:01
886 查看
最近使用Sturts2作文件下载时,发现在不同的浏览器上会有中文文件名乱码的问题,现在把解决方法放在这里,以便留个备份。
struts2配置文件如下:
Xml代码
<action name="fileDownLoad" class="com.test.FileDownloadAction">
<result name="download" type="stream">
<param name="contentType">application/pdf;charset=UTF-8</param>
<param name="contentDisposition">attachment;filename="${filename}.pdf"</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
FileDownloadAction.java的文件名处理的 代码如下(其他代码忽略):
Java代码
/** * 下载文件名编码,对于不同的浏览器使用不同的编码格式 * * @param request * @param name */ private String processFileName(HttpServletRequest request, String name) throws UnsupportedEncodingException { String filename = null; String agent = request.getHeader("USER-AGENT"); if (null != agent){ if (-1 != agent.indexOf("Firefox")) {//Firefox filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(name.getBytes("UTF-8"))))+ "?="; }else if (-1 != agent.indexOf("Chrome")) {//Chrome filename = new String(name.getBytes(), "ISO8859-1"); } else {//IE7+ filename = java.net.URLEncoder.encode(name, "UTF-8"); filename = StringUtils.replace(filename, "+", "%20");//替换空格 } } else { filename = name; } return filename; }
网上很多说直接使用"ISO8859-1"编码格式的问题,经过验证并不能很好的解决问题,还是需要对于不同的浏览器使用不同的编码格式,浏览器兼容性的问题真心纠结。。。
注:这里只选取了三种主流浏览器(ie7+,firefox8.0,chrome18.0),其他浏览器未作测试。
最近使用Sturts2作文件下载时,发现在不同的浏览器上会有中文文件名乱码的问题,现在把解决方法放在这里,以便留个备份。
struts2配置文件如下:
Xml代码
<action name="fileDownLoad" class="com.test.FileDownloadAction">
<result name="download" type="stream">
<param name="contentType">application/pdf;charset=UTF-8</param>
<param name="contentDisposition">attachment;filename="${filename}.pdf"</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
</result>
</action>
<action name="fileDownLoad" class="com.test.FileDownloadAction"> <result name="download" type="stream"> <param name="contentType">application/pdf;charset=UTF-8</param> <param name="contentDisposition">attachment;filename="${filename}.pdf"</param> <param name="inputName">inputStream</param> <param name="bufferSize">4096</param> </result> </action>
FileDownloadAction.java的文件名处理的 代码如下(其他代码忽略):
Java代码
/** * 下载文件名编码,对于不同的浏览器使用不同的编码格式 * * @param request * @param name */ private String processFileName(HttpServletRequest request, String name) throws UnsupportedEncodingException { String filename = null; String agent = request.getHeader("USER-AGENT"); if (null != agent){ if (-1 != agent.indexOf("Firefox")) {//Firefox filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(name.getBytes("UTF-8"))))+ "?="; }else if (-1 != agent.indexOf("Chrome")) {//Chrome filename = new String(name.getBytes(), "ISO8859-1"); } else {//IE7+ filename = java.net.URLEncoder.encode(name, "UTF-8"); filename = StringUtils.replace(filename, "+", "%20");//替换空格 } } else { filename = name; } return filename; }
/** * 下载文件名编码,对于不同的浏览器使用不同的编码格式 * * @param request * @param name */ private String processFileName(HttpServletRequest request, String name) throws UnsupportedEncodingException { String filename = null; String agent = request.getHeader("USER-AGENT"); if (null != agent){ if (-1 != agent.indexOf("Firefox")) {//Firefox filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(name.getBytes("UTF-8"))))+ "?="; }else if (-1 != agent.indexOf("Chrome")) {//Chrome filename = new String(name.getBytes(), "ISO8859-1"); } else {//IE7+ filename = java.net.URLEncoder.encode(name, "UTF-8"); filename = StringUtils.replace(filename, "+", "%20");//替换空格 } } else { filename = name; } return filename; }
网上很多说直接使用"ISO8859-1"编码格式的问题,经过验证并不能很好的解决问题,还是需要对于不同的浏览器使用不同的编码格式,浏览器兼容性的问题真心纠结。。。
注:这里只选取了三种主流浏览器(ie7+,firefox8.0,chrome18.0),其他浏览器未作测试。
相关文章推荐
- 解决不同浏览器上中文文件名的下载乱码问题php验证可行的测试过ie ff 和chrome的
- 解决不同浏览器上中文文件名的下载乱码问题
- [置顶] PHP解决浏览器 下载文件 中文名称乱码问题--兼容大多浏览器
- 解决Struts2文件下载中文名称乱码以及文件名称中包含空格问题
- 使用Content-Disposition: attachment; filename=FILENAME,在Firefox浏览器中下载文件,文件名中文乱码问题解决。
- PHP解决浏览器 下载文件 中文名称乱码问题--兼容大多浏览器
- 在Servlet中以下载的方式向浏览器写数据--中文文件乱码问题解决
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 不同浏览器下载文件 中文名字乱码解决
- struts2文件下载中文乱码问题彻底解决
- Struts2 .apk 文件下载及解决中文文件名乱码问题(转)
- 跨浏览器PHP下载文件名中的中文乱码问题解决方法
- 解决struts2在(IE,Firefox)下载文件名乱码问题
- 不同浏览器上中文文件名的下载乱码问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题
- 解决各大浏览器下载文件乱码以及Firefox下载文件名不全问题