2 回答
TA贡献1815条经验 获得超10个赞
我解决了在Content-Type
标题中指定字符集的问题:
response.setHeader(HttpHeaders.CONTENT_TYPE, "text/plain; charset=utf-8");
没有它,Linux 服务器正在返回:
Content-Type: text/plain;charset=ISO-8859-1
TA贡献2019条经验 获得超9个赞
看起来像cURL相关的问题,这是因为Content-Disposition标题的filename部分(这里的问题是关于日志的文件名格式,主要是日期部分)。
Content-Disposition应该形成的方式最初由RFC 2047和RFC 2231描述;所以设置filename部分的正确方法是对其进行编码:
String fileName = URLEncoder.encode(f.getName(), "UTF-8");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");
附加信息
顺便说一句,后来的RFC 5987引入了在可选的“扩展”参数中使用编码的可能性(filename*在我们的例子中);现代浏览器都支持它。
它使您可以添加可选的“扩展”参数:
Content-Disposition: attachment;
filename="EURO rates";
filename*=utf-8''%e2%82%ac%20rates
这里支持RFC 5987 的用户代理将使用filename*参数,而旧的用户代理将忽略它并filename改为使用。
添加回答
举报