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