Content-Disposition 使用哪种编码?

作者:vkvi 来源:ITPOW(原创) 日期:2020-3-2

假如使用 HtmlEncode

如果是英文,一切无问题,如果 fileIdentifier 是中文,则下载的文件名:

  • Chrome:正常中文
  • Firefox:正常中文
  • Edge:乱码

Content-Disposition 使用哪种编码?

以上是 Edge 中的乱码,我查了下规范,据说 filename 后面本身就只能跟 ASCII,不过现在浏览器通常都支持非 ASCII 了,Edge 虽然是微软最新的浏览器,但是居然还是这么落伍,没跟上队伍。

那改为 UrlEncode

  • Chrome:正常中文
  • Firefox:Url 编码格式
  • Edge:正常中文

Content-Disposition 使用哪种编码?

以上是 Firefox 中效果图,看来还是 Chrome 厉害,咋都匹配。

有没有两全齐美呢?

filename* + UrlEncode

注意,filename 多了个符号 *。

  • Chrome:不认识,以当前执行程序的文件名输出
  • Firefox:正常中文
  • Edge:不认识,以当前执行程序的文件名输出

filename* + UTF-8'' + UrlEncode

  • Chrome:正常中文
  • Firefox:正常中文
  • Edge:正常中文

以上才是 filename* 的正确用法,后面加上了“UTF-8''”,这是RFC 5987中规定的。

filename + filename* + UTF-8'' + UrlEncode

为了兼容老浏览器,我们把 filename、filename* 同时加上,老浏览器认 filename,新浏览器以 filename* 优先。

  • Chrome:正常中文
  • Firefox:正常中文
  • Edge:正常中文

遇特殊字符时怎样处理?假如 fileIdentifier 中有:<、>、&、'、"、:、;,那么经过上述方法,输出时,其中的:<、>、"、:,在保存时都会被“_”代替,Chrome、Firefox、Edge 均是如此。

相关文章