使用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编码没有包含中文字符,无法正确的直接转码。
网上有人说要在配置文件中设置
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
我试了下,并没有效果。我认为的原因是contentType所针对的是http请求体的内容,对于请求头不起作用。
以下是代码
<!-- struts.xml文件-->

在Tomcat环境下,由于默认编码为ISO8859-1,导致Struts2文件下载时中文文件名出现乱码或空格。通过在`server.xml`设置UTF-8编码并不能解决此问题。实际解决方案是在设置HTTP Header文件名时,将中文转换为ISO8859-1编码。代码示例中展示了如何正确处理这个问题。另外,注意到不同浏览器可能存在兼容性问题,需要调整处理方式。参考了多篇博客文章以找到并理解问题的根本原因。
最低0.47元/天 解锁文章
3182

被折叠的 条评论
为什么被折叠?



