【问题标题】:Cannot change csv file charset to windows-1251无法将 csv 文件字符集更改为 windows-1251
【发布时间】:2021-04-08 12:04:49
【问题描述】:

我尝试创建一个可以下载 csv 文件的按钮。我必须使用 windows-1251 字符集制作文件。 但无论我做什么,文件都以 utf-8 结尾。现在我正在尝试类似的东西:

async createCsv(result) {
    const arrData = result.data
    const aliases = result.aliases
    
    let csvContent = [
        Object.keys(arrData[0]).map(item => aliases[item]).join(";"),
        ...arrData.map(item => Object.values(item).join(";"))
    ]
    .join("\n")
    .replace(/(^\[)|(\]$)/gm, "");
    
    const data = new Blob([csvContent], {
        type: "text/csv;charset=windows-1251;"
    });
    
    const link = document.createElement("a");
    link.setAttribute("href", URL.createObjectURL(data));
    link.setAttribute("download", (new Date).toLocaleString() + ".csv");
    link.style.visibility = 'hidden';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

而且文件是 utf-8 格式。 有没有办法改变字符集?

【问题讨论】:

  • 真的需要 Windows-1251 吗?它是已被 UTF-8 取代的过时 ISO 标准的 Microsoft 特定变体。更新预期这种过时编码的系统可能是解决此问题的更好方法。
  • @Quentin,您无法更改不受您控制的系统。

标签: javascript character-encoding


【解决方案1】:

寻找相同的最后一天。 这才是真正有效的答案 blob with conversion to 8bit cp1251 or cp1252

在我的项目中以以下结束

import * as iconv from 'iconv-lite'
let outdata = this.bankf.getOutputFile();
const encoded = iconv.encode (outdata,'win1251');

var file = new Blob ([encoded], {type: 'text/plain;charset=windows-1251'});
var link = document.createElement("a");
var url = URL.createObjectURL(file);
link.setAttribute("href", url);
link.setAttribute("download", "filename.txt");
document.body.appendChild(link);
link.click();
setTimeout(function() {document.body.removeChild(link); window.URL.revokeObjectURL(url); }, 0);                

仍在寻找其他解决方案,因为 iconv 带来了大约 400kb 的代码,但现在。至少它有效

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多