您的位置:首页 > 编程语言 > Java开发

struts2 文件下载文件名中文乱码及变成空格问题

2017-10-26 14:09 841 查看
使用tomcat作为web容器的话,因为tomcat默认使用ISO8859-1编码,而程序使用utf-8编码,所以在Web编程中经常需要在代码中进行字符串编码的转换。为了省掉这以繁琐的步骤,可以在tomcat目录下的conf/server.xml中设置

<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts 乱码