有多个JS库允许导出到excel。但是,如果我们想遵循极简主义方法来避免额外的依赖,该怎么办?
最简单的方法是从 JSON 生成 CSV,可以轻松在 Excel 中打开。
但是在展示转换逻辑之前,让我们先了解一下 CSV 是什么以及创建 CSV 文件时我们将使用哪种编码。
CSV 格式
此 RFC 4180 逗号分隔值 (CSV) 文件的通用格式和 MIME 类型指定了 CSV 格式的定义。请注意,这只是一个备忘录,因为 CSV 格式尚未正式标准化。
主要定义
- 每条记录位于单独的行上,由换行符 (CRLF) 分隔。
- 文件中的最后一条记录可能有也可能没有结束换行符。
- 标头应在整个文件中包含相同数量的字段。
- 每个字段可以用双引号括起来,也可以不用双引号括起来。
- 包含换行符(CRLF)、双引号和逗号的字段应该用双引号括起来。
- 如果使用双引号括住字段,则字段内出现的双引号必须通过在其前面加上另一个双引号来转义。
编码
在我的 JSON 数据中,我有来自 ISO Latin-1 (ISO/IEC 8859-1) 字符集的字符 æ å ø,在创建 csv 文件时必须考虑这些字符。
需要考虑的 Unicode® 标准版本 15.0 的一些摘录。
Unicode 与 UTF-8/16/32
来自 Unicode® 标准版本 15.0:
- Unicode 是书面字符和文本的通用字符编码标准,包含世界文字中的 149,186 个字符。
- Unicode 字符以三种编码形式之一表示:32 位形式 (UTF-32)、16 位形式 (UTF-16) 和 8 位形式 (UTF-8)。
- Unicode 联盟完全认可使用三种 Unicode 编码形式中的任何一种作为实现 Unicode 标准的一致方式。例如,重要的是不要陷入试图区分“UTF-8 与 Unicode”的陷阱。 UTF-8、UTF-16 和 UTF-32 都是实现 Unicode 标准编码字符的同等有效且一致的方式。
字节顺序标记 (BOM)
- 用于字节顺序标记的字符 U+FEFF (UTF-8 EF BB BF) 被命名为零宽度不间断空格。
- Unicode 纯文本的 UTF-16 和 UTF-32 编码形式对将数据写入文件时使用的字节顺序敏感。
- 识别a开头的字节序列
数据流可以视为数据流正在使用 UTF-8 编码方案的近乎确定的指示。
简而言之,在 CSV 字符串之前添加零宽度不间断空格将强制 Excel 应用 UTF-8 编码而不是 1252:西欧 (Windows) 或 Excel 将选择的其他编码,以防 U+FEFF 字符不是提供.
我将在本系列的下一篇文章中展示使用零宽度不间断空格生成 CSV 文件和不使用零宽度不间断空格的 CSV 文件之间的区别…