JS下载带宏dotm文件时特殊字符转ASCII乱码问题
解决JS下载dotm文件时文件名特殊字符乱码问题
你的问题是因为文件名中的特殊字符被URL编码后未正确解码,导致下载后显示为编码后的字符串(比如Å变成%C5、Ø变成%D8)。可以通过以下方式修复:
- 解码URL编码的文件名:如果文件名是从URL中提取的编码格式,先用
decodeURIComponent()解码为原始UTF-8字符串,再赋值给download属性。 - 确保
download属性使用原始字符:不要直接将编码后的字符串作为文件名使用。
修改后的代码示例
如果文件名需要从URL中提取并解码:
// 从URL末尾提取编码后的文件名 const encodedFileName = url.split('/').pop(); // 解码为原始字符 const fileName = decodeURIComponent(encodedFileName); const anchor = document.createElement("a"); anchor.download = fileName; anchor.href = url; // 若URL是data URI格式,保留此行去掉前缀;否则可删除 anchor.href = anchor.href.slice(5); document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor);
如果文件名是固定的带特殊字符的字符串:
const fileName = 'NEERGÅRDSPARKEN_2024-02-01_15-24-22.dotm'; const anchor = document.createElement("a"); anchor.download = fileName; anchor.href = url; anchor.href = anchor.href.slice(5); document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor);
注意:部分旧浏览器对download属性的非ASCII字符支持有限,需确保目标浏览器版本符合要求。
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

