IE无法理解内容处置标题字段,但适用于Chrome

时间:2015-02-10 06:48:19

标签: java encoding

我能够正确查看Chrome中的文件名,但IE中没有获取文件名

的编码格式

(例如=?UTF-8?B?5qWt55WM5pSv5Ye6UERGXzIwMTUwMjEwMTEwNjIy?=)。

fileName = "=?UTF-8?B?" + new String(Base64.encodeBase64(fileName.getBytes("UTF-8")), "UTF-8") + "?=";

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

没有很好的跨浏览器解决方案。我发现了一篇名字很好的文章Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987,它总结了不同浏览器支持的内容。虽然我无法在你正在使用的base64机制上看到任何内容。

有许多不同的变体,请尝试使用网址编码表单,请参阅http://greenbytes.de/tech/tc2231/#attwithfn2231utf8。实施例

Content-Disposition: attachment; filename*=UTF-8''foo-%c3%a4-%e2%82%ac.html

假设您只需要>这可以获得更好的支持。 IE8

FF22    pass
MSIE8   unsupported
MSIE9   pass
Opera   pass
Saf6    pass
Konq    pass
Chr25   pass

根据您希望支持的IE版本,您可能需要进行一些脏的USER_AGENT嗅探并发送标题。

if (isUserAgentIe(requestHeaders)) {
   fileName = ...
} else {
   fileName = ...
}