JS触发文件下载会弄乱重音字符

时间:2014-11-17 16:01:12

标签: javascript unicode

我以这种方式使用JavaScript触发HTML文件下载:

var pom = document.createElement('a');
pom.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + encodeURIComponent(htmlContent));
pom.setAttribute('download', 'download.html');
pom.click();

这样可以正常工作,但如果在htmlContent中有é,í,ó,ú等重音字符,则下载的文档不会正确显示(它们被奇怪的符号替换)。

如何仅使用JavaScript触发具有此类特殊字符的文本的文件下载?

1 个答案:

答案 0 :(得分:0)

一种方法是HTML-escape任何extended-ascii字符(代码大于127)。

我已经使用Lo-Dash将原始字符串转换为数组,并根据需要将数组映射到HTML转义字符 - 您可以按照自己的意愿执行此操作。

var htmlContent = "é, í, ó, ú, etc.";
htmlContent = _.map(_.toArray(htmlContent), function (char) {
    var code = char.charCodeAt(0);
    if (code > 128) { return "&#" + code + ";"; }
    return char;
}).join("");

var pom = document.createElement('a');
pom.setAttribute('href', 'data:application/octet-stream;charset=utf-8,' + encodeURIComponent(htmlContent));
pom.setAttribute('download', 'download.html');
pom.click();