Nodejs或浏览器JS保存csv在excel中乱码问题

2022-5-16 18:49| 发布者: Hocassian| 查看: 82| 评论: 0|原作者: 梓喵出没

摘要:
C:\Users\Administrator\Downloads\2019-10-13-23-2-14-129306653643400-文章归档 梓喵出没-采集的数据-后羿采集器.html

标题

Nodejs或浏览器JS保存csv在excel中乱码问题

链接

https://www.azimiao.com/4938.html

阅读量

140 人阅读

日期时间

2019-6-25

作者

梓喵·技术

正文

将csv字符串保存为utf-8文件时,不论是Blob还是react-admin的downloadCSV,Excel打开总会乱码,而wps以及其他文本编辑器显示正常。

问题原因

对于utf-8文件,Excel按照uft-8 with bom读取,如果没有读到文件头,则按照unicode读取文件,导致乱码。

解决问题

如何生成正确的CSV字符串有好多成品插件,略过不表。
假设已经生成了类似的字符串:

let myCSV = "name,age\r\nwangdama,ninety"

在字符串前追加字符\ufeff,即utf-8 bom的文件头。

myCSV = '\ufeff' + myCSV;

之后将它喂给blob,或者调用react-admin的downloadCSV方法即可。

html版完整代码:

<body>
    <a id="myDownload" style="display: none"></a>
    <script>
            let myCSV = "name,age\r\nwangdama,ninety";
            myCSV = '\ufeff' + myCSV;
            let myFileName = "test.scv";
            let blobURL = new Blob([myCSV], {type:'text/csv;chartset=utf-8'});
            let downLoadA = document.getElementById("myDownload");
            downLoadA.download = myFileName;
            downLoadA.href = URL.createObjectURL(blobURL);
            downLoadA.click();
            document.removeChild(downLoadA);
    </script>
</body>

保存为html打开即可。


路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部