我遇到了一个我无法理解的问题。 我得到一个 HTML 页面,声明
<meta charset="utf-8" />
,尝试创建并下载包含一些 UTF8 字符的文本文件。
文本存储在 JS 变量内,我尝试使用 DataURI API 将变量内容下载为文本文件。
这是代码:
const myText = "àòùè";
const uriContent = "data:text/plain;charset=utf-8;base64," + btoa(myText);
const element = document.createElement('a');
element.setAttribute('href', uriContent);
element.setAttribute('download', "example_filename.log");
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
生成的文件保存为 ISO8859-15,而不是 dataURI 中声明的 UTF-8。 由于编码错误,会导致出现奇怪的字符。
UNIX下使用
file
命令检查编码:
file example_filename.log
example_filename.log: ISO-8859 text
这就是使用 encodeURIComponent 对我有用的东西:
const uriContent = "data:text/plain;charset=utf-8," + window.encodeURIComponent(myText);
此外,正如 DustInComp 所说,您可以省略对
appendChild
/removeChild
的调用,因为您显式调用 Element.click
。