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
提前致谢。
尝试设置字符编码:
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 或提交响应之后调用此方法,则此方法无效。