React Material-UI DataTable波斯语文本CSV导出编码异常求助
解决MUIDataTable导出波斯语文本CSV乱码问题
波斯语CSV导出乱码的核心原因是:Windows系统下的Excel默认会将无BOM头的UTF-8文件识别为ANSI编码,导致非ASCII字符解析错误。你需要给CSV文件添加UTF-8 BOM头让Excel正确识别编码。
修改你的exportCSV函数,添加BOM头即可解决问题,有两种实现方式:
方式一:手动添加BOM字符
const exportCSV = (columns, data) => { const csv = [columns.join(','), ...data.map(row => row.join(','))].join('\n'); // 添加UTF-8 BOM头,强制Excel识别为UTF-8编码 const bom = '\ufeff'; const blob = new Blob([bom, csv], { type: 'text/csv;charset=utf-8;' }); const name = JSON.parse(localStorage.getItem('selectedProject'))['url'].replace(/https?:\/\/|\/$/g, ''); saveAs(blob, `${name}_serp_range.csv`); };
方式二:通过iconv-lite生成带BOM的UTF-8编码
如果你继续使用iconv-lite,可以指定utf-8-with-bom编码生成带BOM的内容:
const exportCSV = (columns, data) => { const csv = [columns.join(','), ...data.map(row => row.join(','))].join('\n'); // 生成带BOM的UTF-8编码内容 const encodedCSV = iconv.encode(csv, 'utf-8-with-bom'); const blob = new Blob([encodedCSV], { type: 'text/csv;charset=utf-8;' }); const name = JSON.parse(localStorage.getItem('selectedProject'))['url'].replace(/https?:\/\/|\/$/g, ''); saveAs(blob, `${name}_serp_range.csv`); };
关键说明
- 两种方式本质都是给CSV文件添加
\ufeff字符作为BOM头,Excel读取时会以此判断文件编码为UTF-8,避免波斯语字符被错误解析。 - 无需修改MUIDataTable的其他配置,保持原有的
onDownload逻辑即可。
内容的提问来源于stack exchange,提问作者Mohammad Bagher Rezanejad
相关产品推荐
相关产品推荐

