如何正确导出含€/$/£符号的HTML表格至Excel?
解决Excel导出时欧元符号€显示乱码的问题
嘿,我刚好碰到过一模一样的问题!你遇到的乱码是因为Excel没能正确识别导出内容的UTF-8编码,导致欧元符号这类特殊字符被错解析成了€。试试下面修改后的函数,完美解决这个问题:
function ExportToExcel() { var htmltabel = document.getElementById("tabella_finale"); var html = htmltabel.outerHTML; // 关键:添加UTF-8 BOM头+明确编码类型,让Excel正确识别 var blob = new Blob([ '\ufeff', // UTF-8 BOM标记,Excel靠它识别UTF-8编码 html ], { type: 'application/vnd.ms-excel;charset=utf-8' }); // 创建临时下载链接 var downloadUrl = URL.createObjectURL(blob); var link = document.createElement('a'); link.href = downloadUrl; link.download = '导出数据.xlsx'; // 这里可以自定义文件名 document.body.appendChild(link); link.click(); // 清理临时元素和URL document.body.removeChild(link); URL.revokeObjectURL(downloadUrl); }
为什么原代码会出问题?
- 原代码直接用
encodeURI处理HTML后拼接data:协议链接,但encodeURI的编码方式和Excel对UTF-8的识别规则不匹配,特殊字符就会乱码。 - 新代码用
Blob对象添加了UTF-8的BOM头(\ufeff),同时指定了charset=utf-8的MIME类型,相当于给Excel明确说了“这是UTF-8编码的内容”,自然就能正确显示欧元符号了。
额外小优化
- 自定义下载文件名比浏览器默认的乱码文件名友好得多;
- 用临时a标签下载比
window.open更稳定,大表格也不会出问题。
内容的提问来源于stack exchange,提问作者Rob




