Excel CSV和标准CSV的真正区别


16

Excel CSV和标准CSV的真正区别是什么?

例如,当处理一个单元格内带有换行符的列时,它们如何进行不同的编码?

Answers:


19

这完全取决于您定义为“标准” 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将如何导出它?让我们看看–文本编辑器将显示以下内容:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

不太复杂。它0D在单元格中的换行处插入回车符(hex )。每个单元格都用双引号引起来。同样,实际的行用回车符分隔。

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

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

如果它没有做到这一点,那么您将得到类似这样的乱码–请注意,现在有四行而不是两行,因为它无法忽略换行符。

+---+---------------+------------+------------+
|   | 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文件。


@shhck:为什么我看到csv解析器实现将“ excel” csv与“ csv”分开?我还发现excel是非常强大的实现。
user157195 2011年

@ user157195取决于解析器,您应该在其文档中阅读为何Excel与非Excel输入之间存在差异的原因。我不知道为什么应该有一个。我只从R知道这一点,R像对待其他CSV一样对待Excel CSV。但是,它也可以读取XLS。
slhck 2011年

2
作为多年来以编程方式读取excel生成的CSV文件的各种形状和大小的人,我可以证明slhck是100%正确的-Excel会生成100%的“标准” CSV文件。每一次。
Mark Henderson

@Farseeker感谢您的确认!(现在您有1337名代表!)
slhck 2011年

5
警告!在使用“,”作为小数点的国家/地区,Excel将“非常非常聪明”并使用“;” 分隔符。这样可以避免Zee Germanz看到太多的“引号”;“中”;“它们的”;“文件”。不幸的是,如果他们随后将其发送到英国办事处,它将获得AllSmooshedUpIntoASingleCellOnEveryLine。辉煌。
路加·乌瑟伍德

-1

我从最初的csv实现中了解到,所有文本字段都用引号引起来,而数字则不需要。Excel不会执行此操作,如果您尝试在非Microsoft平台上上传Excel生成的csv文件,它们将失败。这是一种标准的microsoft方法,忽略互操作性,并专注于盲目遵循规则。IE发生了类似的事情,它们正确地遵循html / css规则来填充和设置边距属性,而忽略了每个现有网页和网络浏览器对它们进行不同处理的事实。结果,几乎每个网页现在都具有针对IE的特殊规则。我发现excel产生的csv文件没有用,并使用一列“连接”函数自己手动创建它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.