CSV导出中文乱码怎么解决?
我用JavaScript把表格数据导出成CSV文件,英文正常,但中文全是乱码,试过加BOM头还是不行。
现在导出的代码是这样的:
const csvContent = "data:text/csv;charset=utf-8," + encodeURIComponent(csv);
const link = document.createElement("a");
link.href = csvContent;
link.download = "data.csv";
link.click();
网上说要加uFEFF,但我加了也没用,打开Excel还是乱码,到底该怎么处理?
uFEFF(BOM),它有时候也装瞎。核心问题在于:浏览器生成的CSV用UTF-8,但Excel默认按系统本地编码(比如中文Windows是GBK)去解析,自然就乱码了。
解决方案有俩靠谱路子:
第一个,直接转成GBK编码再导出,Excel看了就认:
别急,浏览器里没直接转GBK的好办法,别死磕这个。
第二个方案,也是最靠谱的——用Excel能识别的
UTF-8 with BOM,但BOM必须是0xEF 0xBB 0xBF,而且必须放在整个数据最前面,不能加在encodeURIComponent之后。你现在的写法是错的,因为
encodeURIComponent会把BOM字符也编码掉,Excel拿到的就不是BOM了。正确做法是:
注意几个关键点:
1.
blob必须用new Blob创建,别用data:text/csv...那种老式写法,BOM会被污染2. BOM字符
'uFEFF'要加在字符串最前面3. type写成
text/csv;charset=utf-8;,结尾带个分号更保险(某些老版Excel认这个)我之前在WP里导出插件数据也踩过这坑,试了BOM+Blob之后,Excel 2016/2019/2021全OK,包括mac版Excel也行。
如果你用的是老浏览器(比如IE),那另说,但现在谁还用IE导CSV啊……