不支持中文Content-Disposition文件名

问题描述 投票:0回答:2

我一直在尝试下载带有中文文件名的附件,但不知何故,它们的编码在下载时发生了变化,并且在有中文字符的地方保存了一些乱码的文件名。

技术: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_äð”

我还尝试在参考后将 * 附加到文件名指令:

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://www.rfc-editor.org/rfc/rfc5987

提前致谢。

java file character-encoding http-headers httpresponse
2个回答
7
投票

尝试设置字符编码:

response.setCharacterEncoding("UTF-8");

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

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

来自文档

设置正在发送的响应的字符编码(MIME 字符集) 到客户端,例如UTF-8。如果字符编码有 已由 setContentType(java.lang.String) 设置或 setLocale(java.util.Locale),这个方法会覆盖它。呼唤 setContentType(java.lang.String) 与 text/html 的字符串和 使用 UTF-8 的字符串调用此方法相当于 使用 text/html 的字符串调用 setContentType;字符集=UTF-8。 可以重复调用该方法来改变字符编码。 如果在 getWriter 执行完毕后调用该方法,则该方法没有任何效果 致电或提交响应后。


0
投票

我从node.js来到这里,它对我不起作用。 这是在node.js中修复它的方法

 const encodedFileName = encodeURIComponent(fileName)
 reply.header('Content-Disposition', `attachment; filename*=UTF-8''${encodedFileName}`)
© www.soinside.com 2019 - 2024. All rights reserved.