假如使用 HtmlEncode
如果是英文,一切无问题,如果 fileIdentifier 是中文,则下载的文件名:
以上是 Edge 中的乱码,我查了下规范,据说 filename 后面本身就只能跟 ASCII,不过现在浏览器通常都支持非 ASCII 了,Edge 虽然是微软最新的浏览器,但是居然还是这么落伍,没跟上队伍。
那改为 UrlEncode
以上是 Firefox 中效果图,看来还是 Chrome 厉害,咋都匹配。
有没有两全齐美呢?
filename* + UrlEncode
注意,filename 多了个符号 *。
filename* + UTF-8'' + UrlEncode
以上才是 filename* 的正确用法,后面加上了“UTF-8''”,这是RFC 5987中规定的。
filename + filename* + UTF-8'' + UrlEncode
为了兼容老浏览器,我们把 filename、filename* 同时加上,老浏览器认 filename,新浏览器以 filename* 优先。
遇特殊字符时怎样处理?假如 fileIdentifier 中有:<、>、&、'、"、:、;,那么经过上述方法,输出时,其中的:<、>、"、:,在保存时都会被“_”代替,Chrome、Firefox、Edge 均是如此。