struts2 文件下载文件名中文乱码及变成空格问题
2017-10-26 14:09
841 查看
使用tomcat作为web容器的话,因为tomcat默认使用ISO8859-1编码,而程序使用utf-8编码,所以在Web编程中经常需要在代码中进行字符串编码的转换。为了省掉这以繁琐的步骤,可以在tomcat目录下的conf/server.xml中设置
将默认字符集编码设置utf-8,与程序一致,基本可解决中文乱码问题。
但这次进行文件下载的时候,中文文件名传到浏览器的时候却变成了空格。从网上试了很多方法没有效果,最后终于发现了一两篇有用的文章。这里先说一下解决方法。
因为文件名是设置在HTTP header中的,而Http的请求头要求以ISO8859-1编码,所以在设置文件名的时候需要将中文转换成ISO8859-1编码:
至于为什么不用name.getBytes(“ISO8859-1”)呢?因为ISO8859-1编码没有包
4000
含中文字符,无法正确的直接转码。
网上有人说要在配置文件中设置
我试了下,并没有效果。我认为的原因是contentType所针对的是http请求体的内容,对于请求头不起作用。
以下是代码
参考文章:
1、http://blog.csdn.net/u011331844/article/details/38755789
2、http://1358440610-qq-com.iteye.com/blog/2105583
================================
搞懵了,上面方法在ie上不兼容,换成下面这个方法。发现自己还是没有真正搞懂编码的问题,mark一下,把它弄懂
记录几篇文章,参考下
https://www.cnblogs.com/godtrue/p/4333262.html
http://blog.csdn.net/diquren/article/details/46274457
http://blog.csdn.net/yi_Afly/article/details/53222594?locationNum=5&fps=1
http://blog.csdn.net/u012117531/article/details/54808960
=============================================
http://blog.51cto.com/polaris/377468
http://www.regexlab.com/zh/encoding.htm
http://blog.jobbole.com/84903/
https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
将默认字符集编码设置utf-8,与程序一致,基本可解决中文乱码问题。
但这次进行文件下载的时候,中文文件名传到浏览器的时候却变成了空格。从网上试了很多方法没有效果,最后终于发现了一两篇有用的文章。这里先说一下解决方法。
因为文件名是设置在HTTP header中的,而Http的请求头要求以ISO8859-1编码,所以在设置文件名的时候需要将中文转换成ISO8859-1编码:
name = new String(name.getBytes(), "ISO8859-1");。
至于为什么不用name.getBytes(“ISO8859-1”)呢?因为ISO8859-1编码没有包
4000
含中文字符,无法正确的直接转码。
网上有人说要在配置文件中设置
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
我试了下,并没有效果。我认为的原因是contentType所针对的是http请求体的内容,对于请求头不起作用。
以下是代码
<!-- struts.xml文件--> <result type="stream" name="success"> <param name="contentType">application/octet-stream;</param> <!-- 要有相对应的getDownloadFile()方法返回值是 InputStream --> <param name="inputName">downloadFile</param> <param name="contentDisposition">attachment;filename="${fileName}"</param> <param name="bufferSize">4096</param> </result>
//Action代码 public String getFileName() { String name = ""; try { // 解决下载文件中文文件名问题 name = new String(name.getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return name; }
参考文章:
1、http://blog.csdn.net/u011331844/article/details/38755789
2、http://1358440610-qq-com.iteye.com/blog/2105583
================================
搞懵了,上面方法在ie上不兼容,换成下面这个方法。发现自己还是没有真正搞懂编码的问题,mark一下,把它弄懂
public String getFileName() { HttpServletRequest request = ServletActionContext.getRequest(); String userAgent = request.getHeader("user-agent").toLowerCase(); if (userAgent.contains("msie") || userAgent.contains("like gecko") ) { // win10 ie edge 浏览器 和其他系统的ie name = URLEncoder.encode(name, "UTF-8"); } else { name = new String(name.getBytes(), "ISO8859-1"); } }
记录几篇文章,参考下
https://www.cnblogs.com/godtrue/p/4333262.html
http://blog.csdn.net/diquren/article/details/46274457
http://blog.csdn.net/yi_Afly/article/details/53222594?locationNum=5&fps=1
http://blog.csdn.net/u012117531/article/details/54808960
=============================================
http://blog.51cto.com/polaris/377468
http://www.regexlab.com/zh/encoding.htm
http://blog.jobbole.com/84903/
https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
相关文章推荐
- 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题
- struts2 Annotation 实现文件下载功能 文件名中文乱码问题
- Struts2 文件下载中文文件名乱码问题
- 【转】彻底解决Asp.net文件下载(Response.WriteFile)时文件名的中文乱码和空格异常问题
- Struts2 .apk 文件下载及解决中文文件名乱码问题(转)
- 解决Struts2文件下载中文名称乱码以及文件名称中包含空格问题
- Struts2 .apk 文件下载及解决中文文件名乱码问题(转)
- struts2 Annotation 实现文件下载功能 文件名中文乱码问题
- 整理java文件下载(中文乱码、火狐浏览器乱码、空格变+号、文件名包含空格时文件名可能显示不全等问题)
- jsp实现文件下载与中文文件名乱码问题解决
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- 中文文件下载文件名乱码问题
- struts2 下载文件,下载弹出框,文件名中文乱码
- 解决PHP在IE浏览旗下载文件,中文文件名乱码问题
- 文件下载 response.setHeader()下载中文文件名乱码问题 解决办法
- Ruby on Rails实现文件的下载以及中文文件名乱码问题
- 文件下载与中文文件名乱码问题解决
- 文件下载 response.setHeader()下载中文文件名乱码问题 解决办法
- Struts2文件下载文件名中文出现乱码解决办法