从JS(浏览器)创建并下载UTF8纯文本文件

问题描述 投票:0回答:1

我遇到了一个我无法理解的问题。 我得到一个 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
javascript data-uri
1个回答
0
投票

这就是使用 encodeURIComponent 对我有用的东西:

const uriContent = "data:text/plain;charset=utf-8," + window.encodeURIComponent(myText);

此外,正如 DustInComp 所说,您可以省略对

appendChild
/
removeChild
的调用,因为您显式调用
Element.click

© www.soinside.com 2019 - 2024. All rights reserved.