csv下载的excel乱序问题

news/2024/7/21 6:51:58 标签: excel, javascript, 前端

问题背景

当下载csv时,number及wps打开都没有问题,但excel打开出现乱序啊

function downloadCSV(csv: string, filename: string) {
    // const bom = "\uFEFF"
    // const blob = new Blob([bom, csv], { type: "text/csv;charset=utf-8;" })
    const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" })
    const url = URL.createObjectURL(blob)
    const link = document.createElement("a")
    link.setAttribute("href", url)
    link.setAttribute("download", filename)
    link.style.visibility = "hidden"
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
}

解决方案

当增加bom时乱序解决

function downloadCSV(csv: string, filename: string) {
    const bom = "\uFEFF"
    const blob = new Blob([bom, csv], { type: "text/csv;charset=utf-8;" })
    // const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" })
    const url = URL.createObjectURL(blob)
    const link = document.createElement("a")
    link.setAttribute("href", url)
    link.setAttribute("download", filename)
    link.style.visibility = "hidden"
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
}

问题结论

在下载 CSV 文件时,如果不添加 BOM(Byte Order Mark,字节顺序标记),会出现 Excel 打开乱码或者数据错误的问题。这是因为 Excel 默认使用 ANSI 编码打开 CSV 文件,而 ANSI 编码与 UTF-8 编码存在差异,如果没有 BOM,Excel 无法正确识别文件编码,从而导致乱码或者数据错误的问题。

因此,为了确保下载的 CSV 文件可以在 Excel 中正确打开,需要在文件内容前添加 BOM。BOM 是一个特殊的 Unicode 字符,它可以用来表示文本文件的字节顺序和编码方式。在 UTF-8 编码中,BOM 的字节序列是 EF BB BF,将 BOM 添加到文件内容前,可以让 Excel 正确识别文件编码,并且按照正确的方式解析文件内容。


http://www.niftyadmin.cn/n/1019049.html

相关文章

(2)达梦数据库匹配

在upp构建之初,我们规划了3个数据库支持:mysql、sqlserver、oracle。随着产品的完善,我们慢慢需要走向国内创信需求适配,dm数据库是第一个出口。 统一流程平台优先对达梦数据库进行了适配。并发布可第一个全流程样例。 yml中的配置&#xf…

Spark Streaming和Kafka整合开发指南(二)

本文将介绍如何使用Spark 1.3.0引入的Direct API从Kafka中读数据。 和基于Receiver接收数据不一样,这种方式定期地从Kafka的topicpartition中查询最新的偏移量,再根据定义的偏移量范围在每个batch里面处理数据。当作业需要处理的数据来临时,s…

WARNING: 'aclocal-1.14' is missing on your system.

源码安装zabbix agent时进行到make install时报如下错误: WARNING: aclocal-1.14 is missing on your system.You should only need it if you modified acinclude.m4 orconfigure.ac or m4 files included by configure.ac.The aclocal program is part of the GNU…

【优化求解】遗传算法求解峰谷分时电价电动汽车充电负荷优化问题【含源码 210期】

一、代码运行视频(哔哩哔哩) 【优化求解】遗传算法求解峰谷分时电价电动汽车充电负荷优化问题【含源码 210期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]欧名勇,陈仲伟,谭玉东,文明,周志成.基于峰谷分时电价引导下的电动汽车充电…

(3)低代码平台的现状与基于IT基础组件的研发变更

经过几年的努力,我们的自己的新平台以进入一个相对稳定阶段,后续将基于这个平台完善我们的合同/案件/法务/风险/合规等系统。为了在后续的构建中有相应的知识体系来支撑相应的概念,低代码平台与我们的平台基本对标。 什么是低代码平台&#…

【Matlab心电信号】心电信号特征提取+分析处理【含源码 289期】

一、代码运行视频(哔哩哔哩) 【Matlab心电信号】心电信号特征提取分析处理【含源码 289期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015. [2]高宝建,彭进业,王琳,潘…

TCP协议三次握手连接四次握手断开和DOS攻击

TCP连接的状态图 TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图。1、建立连接协议(三次握手) (1)客户 端发送一个带SYN标志的TCP…

gclient多源码管理工具 DEPS文件

gclient来管理源码的checkout, update等。 gclient是google专门为这种多源项目编写的脚本,它可以将多个源码管理系统中的代码放在一起管理。甚至包括将Git和svn代码放在一起。重点说明下和gclient密切相关的两类文件.gclient和DEPS。.gclient文件是gclient的控制文件…