中文不支持Content-Disposition文件名

5

我一直在尝试下载具有中文文件名的附件,但是在下载时它们的编码会发生变化,一些含有中文字符的奇怪文件名被保存。

技术: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

提前致谢。

1个回答

7

尝试设置字符编码:

response.setCharacterEncoding("UTF-8");

您可能还希望先对文件名进行编码:
filename= URLEncoder.encode(fileName, "UTF-8");

文档中可知:
设置响应的字符编码(MIME charset),例如UTF-8。如果已经通过setContentType(java.lang.String)或setLocale(java.util.Locale)设置了字符编码,则该方法会覆盖它们。将setContentType(java.lang.String)的String参数设置为text/html,将此方法的String参数设置为UTF-8,等同于用String参数text/html; charset=UTF-8调用setContentType。可以多次调用此方法以更改字符编码。 如果在调用getWriter之后或响应已被提交后调用此方法,则无效。

已经尝试过 response.setCharacterEncoding("UTF-8");让我检查一下文件名编码。 - Rhythm Singh
1
你是否对文件名进行了编码?在调用getWriter()之前是否设置了字符编码? - Mạnh Quyết Nguyễn
在收到响应后记得解码文件名,我忘了。 - Sanal S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接