1

我尝试创建一个可以下载 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。有没有办法改变字符集?

4

1 回答 1

0

寻找同样的最后一天。这是真正适用 于转换为 8 位 cp1251 或 cp1252 的 blob的答案

在我的项目中最终得到以下结果

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 的代码,但现在。至少它有效

于 2021-12-04T08:34:59.963 回答