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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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文件-->
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值