将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打开即可。

我来吐槽

*

*

0位绅士参与评论

  1. 野兔06-29 23:55 回复

    测试ajax评论