2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
我解決了在Content-Type
標(biāo)題中指定字符集的問題:
response.setHeader(HttpHeaders.CONTENT_TYPE, "text/plain; charset=utf-8");
沒有它,Linux 服務(wù)器正在返回:
Content-Type: text/plain;charset=ISO-8859-1

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
看起來像cURL相關(guān)的問題,這是因?yàn)镃ontent-Disposition標(biāo)題的filename部分(這里的問題是關(guān)于日志的文件名格式,主要是日期部分)。
Content-Disposition應(yīng)該形成的方式最初由RFC 2047和RFC 2231描述;所以設(shè)置filename部分的正確方法是對其進(jìn)行編碼:
String fileName = URLEncoder.encode(f.getName(), "UTF-8");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");
附加信息
順便說一句,后來的RFC 5987引入了在可選的“擴(kuò)展”參數(shù)中使用編碼的可能性(filename*在我們的例子中);現(xiàn)代瀏覽器都支持它。
它使您可以添加可選的“擴(kuò)展”參數(shù):
Content-Disposition: attachment;
filename="EURO rates";
filename*=utf-8''%e2%82%ac%20rates
這里支持RFC 5987 的用戶代理將使用filename*參數(shù),而舊的用戶代理將忽略它并filename改為使用。
添加回答
舉報(bào)