題 Excel CSV和標準CSV之間的真正區別


Excel CSV和標準CSV之間的真正區別是什麼?

例如,在處理一個單元格中包含換行符的列時,它們如何以不同方式編碼?


14
2018-06-26 09:05


起源




答案:


它絕對取決於您定義為“標準”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斷線在我們的牢房裡。每個單元格都用雙引號括起來。此外,實際的行用回車符分隔。

為了正確解析這個問題,需要一個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文件。


18
2018-06-26 09:33



@shhck:為什麼我看到csv解析器實現將“excel”csv與“csv”分開?我還發現excel是一個非常強大的實現。 - user157195
@ user157195取決於解析器,您應該在其文檔中閱讀為什麼Excel和非Excel輸入之間存在差異。我不明白為什麼應該有一個。我只知道這個 [R,就像其他人一樣對待Excel CSV。但它也可以讀取XLS。 - slhck
作為一個以編程方式閱讀各種形狀和大小的excel生成的CSV文件的人,我可以證明slhck 100%正確 - Excel生成100%“標準”CSV文件。每一次。 - Mark Henderson
@Farseeker感謝您的確認! (你有 1337 現在代表!) - slhck
警告!在使用','作為小數點的國家,Excel將“非常非常聰明”並使用';'分隔符。這樣可以避免Zee Germanz看到太多“引號”;“in”;“他們的”;“文件”。不幸的是,如果他們隨後將其發送到英國辦事處,它將獲得AllSmooshedUpIntoASingleCellOnEveryLine。輝煌。 - Luke Usherwood


我對原始csv實現的理解是,所有文本字段都用引號括起來,數字不需要。 Excel不會這樣做,如果您嘗試在非Microsoft平台上上傳Excel生成的csv文件,它們將失敗。這是一種標準的微軟方法,忽略了互操作性,並專注於盲目遵循規則。 IE發生了類似的事情,它們正確地遵循了html / css規則的填充和邊距屬性,並忽略了每個現有網頁和Web瀏覽器對它們進行不同處理的事實。結果,幾乎每個網頁現在都有IE的特殊規則。我發現excel生成的csv文件沒用,並使用一串“連接”函數自己手動創建它們。


-1
2017-07-11 13:00