我一直在尝试下载带有中文文件名的附件,但不知何故,它们的编码在下载时发生了变化,并且在有中文字符的地方保存了一些乱码的文件名。
技术: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
提前致谢。
尝试设置字符编码:
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 执行完毕后调用该方法,则该方法没有任何效果 致电或提交响应后。
我从node.js来到这里,它对我不起作用。 这是在node.js中修复它的方法
const encodedFileName = encodeURIComponent(fileName)
reply.header('Content-Disposition', `attachment; filename*=UTF-8''${encodedFileName}`)