前端导出Excel时中文乱码怎么办?

端木楚萓 阅读 721

我用Blob和URL.createObjectURL做Excel导出,但下载的文件里中文全是乱码,英文正常。试过加charset=utf-8也不行,是不是编码方式不对?

这是我的导出按钮和触发代码:

<button onclick="exportExcel()">导出数据</button>

<script>
function exportExcel() {
  const data = '姓名,年龄n张三,25';
  const blob = new Blob([data], { type: 'application/vnd.ms-excel' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = '用户数据.csv';
  a.click();
}
</script>
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
UP主~建杰
你这个问题我之前也踩过坑,主要原因是 Excel(尤其是老版本)默认用的是 GBK 编码,而你的 Blob 是 UTF-8,没加 BOM 头,所以中文就乱码了。

解决办法很简单:在数据前面加一个 UTF-8 的 BOM 头 uFEFF,这样 Excel 就能识别是 UTF-8 编码了。

另外你代码里有个小问题:'姓名,年龄n张三,25' 这里的 n 应该是 n 才对,换行符写错了。

修改后的代码这样写就行:

function exportExcel() {
const data = '姓名,年龄n张三,25';
const blob = new Blob(['uFEFF' + data], { type: 'application/vnd.ms-excel;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = '用户数据.csv';
a.click();
}


注意两点:
1. 字符串前加了 uFEFF,这是 BOM 头
2. type 里加了 charset=utf-8,虽然不是必须,但加上更保险

希望能帮到你,你试试看,应该就不乱码了。
点赞
2026-02-25 12:04