不支持中文的 Content-Disposition 文件名

Rhy*_*ngh 4 java file httpresponse character-encoding http-headers

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

技术: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://tools.ietf.org/html/rfc5987

提前致谢。

Mạn*_*yễn 6

尝试设置字符编码:

response.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)

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

filename= URLEncoder.encode(fileName, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

文件

将发送到客户端的响应的字符编码(MIME 字符集)设置为 UTF-8。如果字符编码已由 setContentType(java.lang.String) 或 setLocale(java.util.Locale) 设置,则此方法将覆盖它。用text/html的String调用setContentType(java.lang.String),用UTF-8的String调用这个方法,等价于用text/html的String调用setContentType;字符集=UTF-8。可以重复调用此方法来更改字符编码。 如果在调用 getWriter 或提交响应之后调用此方法,则此方法无效。