不支持中文内容处理文件名

时间:2018-05-18 09:59:18

标签: java file character-encoding http-headers httpresponse

我一直在尝试下载带有中文文件名的附件,但不知何故,他们的编码会在下载时发生变化,并且在有中文分区的情况下会保存一些乱码文件。

技术:Java 服务器:Apache Tomcat

这是我已经尝试过的

response.setHeader("Content-Disposition", "attachment; filename=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");

输出(下载附件名称):“7_6_4_AM__2017_JS_003_W_äð”

在参考:

之后,我也尝试将*附加到filename指令

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition response.setHeader("Content-Disposition", "attachment; filename*=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");

输出(下载的附件名称):“706.txt”

此外,

在我的研究中,我发现HTTP标头消息不能携带ISO-8859-1字符集之​​外的字符。

https://tools.ietf.org/html/rfc5987

先谢谢。

1 个答案:

答案 0 :(得分:1)

尝试设置字符编码:

response.setCharacterEncoding("UTF-8");

您可能还想先对文件名进行编码:

filename= URLEncoder.encode(fileName, "UTF-8");

来自document

  

设置要发送的响应的字符编码(MIME字符集)   例如,客户端到UTF-8。如果字符编码有   已经由setContentType(java.lang.String)或设置   setLocale(java.util.Locale),此方法会覆盖它。调用   setContentType(java.lang.String),带有text / html和   使用UTF-8字符串调用此方法与   使用text / html的String调用setContentType;字符集= UTF-8。   可以重复调用此方法以更改字符编码。   如果在getWriter之后调用此方法,则此方法无效   在响应被提交之后或之后。