Excel CSV和标准CSV之间的真正区别

Modified on: Sat, 03 Nov 2018 05:40:03 +0800

Excel CSV与标准CSV之间的真正区别是什么?

例如,当处理一个单元格中包含换行符的列时,它们如何以不同方式对其进行编码?

最佳答案

这完全取决于您定义为“标准”CSV的内容。就我而言,Excel遵循RFC 4180中概述的规则,“CSV的通用格式和MIME类型文件”。

考虑一个表,其中第一行中的第一个单元格有两个换行符。在Excel中,它看起来如下所示:

+---+---------------+------------+------------+ | | A | B | C | +---+---------------+------------+------------+ | 1 | col1, line1a | | | | | col1, line1b | | | | | col1, line1c | col2, row1 | col3, row1 | | 2 | col1, row2 | col2, row2 | col3, row2 | +---+---------------+------------+------------+

现在,Excel将如何导出?让我们看看 - 文本编辑器会显示:

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

不是很复杂。它插入一个回车符(十六进制0D),其中换行符在我们的单元格中。每个单元格都用双引号括起来。此外,实际的行用回车符分隔。

为了正确解析,CSV解析器需要

  • 当它出现在双引号(即单元格)中时忽略该回车
  • 当它出现在双引号
  • 之外时忽略该回车

如果没有这样做,你最终会出现像这样的乱码 - 请注意,现在有四行而不是两行,因为它无法忽略换行符。 / p>

+---+---------------+------------+------------+ | | A | B | C | +---+---------------+------------+------------+ | 1 | "col1, line1a | | | | 2 | col1, line1b | | | | 3 | col1, line1c" | col2, row1 | col3, row1 | | 4 | col1, row2 | col2, row2 | col3, row2 | +---+---------------+------------+------------+

但是,让我们看看RFC的内容,也许Excel做得对吗?

  

包含换行符(CRLF),双引号和逗号的字段应括在双引号中。

整洁,这正是Excel所做的。总而言之,Excel似乎遵循“标准”CSV文件的建议。给定一个合适的CSV解析器,它也应该能够读取Excel CSV文件。

作者:slhck

相关问答

添加新评论