之間有什麼區別 - CSV (MS-Dos)、CSV (Macintosh)、CSV(逗號分隔)

之間有什麼區別 - CSV (MS-Dos)、CSV (Macintosh)、CSV(逗號分隔)

excel 2010 中的 CSV (MS-Dos)、CSV (Macintosh)、CSV(逗號分隔)檔案類型之間有什麼區別?它們都被列為保存檔案類型,但最終都是逗號分隔值檔案。

答案1

[它們]之間的差異在於文字欄位中是否有某些特殊字元;例如,重音(外語)字元。如果匯出為 Windows CSV,這些欄位將使用 Windows-1252 代碼頁進行編碼。 DOS 編碼通常使用代碼頁 437,它會對應 Windows 之前的舊 PC 中使用的字元。如果您匯出為一種,然後使用需要另一種的工具匯入,大多數情況看起來都很好,但如果您認識某人的名字中帶有元音變音(或其他外來字元),您會得到意想不到的結果。

來源

答案2

excel 中的 CSV (MS-Dos)、CSV (Macintosh)、CSV(逗號分隔)檔案類型有何不同

使用 Excel 16.8 2023 MS365:

使用file(macOS 12.6 文件 5.41 Darwin 等)

file *.csv
MSDOS.csv: CSV text
MAC.csv: ASCII text, with CR line terminators
CSV.csv: CSV text

注意:file提供猜測,並且能夠根據 csv 格式的長度給出不同的答案。

回車 (CR) 和換行 (LR) 位元組的存在是最大的格式差異,並且在內省時更加清晰。

0x0d 回車 0x0a LF

 for file in *.csv; do echo -n $file" "; xxd $file | tail -2; done
CSV.csv 000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,
MAC.csv 00001260: 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c  .,,,.,,,.,,,.,,,
00001270: 0d2c 2c2c                                .,,,
MSDOS.csv 000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,

0x2c 是上述 CSV 中的分隔符號。值得注意的是,最後一行沒有接收終端 0x0D 0x0A (CSV)、0x0d (MAC) 或 0x0D 0x0A (MSDOS)。這可能會讓人感到驚訝,因為我親眼目睹 Excel 添加了一個額外的尾隨 0x0D 0x0A,如果程式碼使用 CR 和/或 LF 指示繼續解析,這可能會破壞處理邏輯。

00000530: 2c-- --34 3045 4330 30-- ---- --2c 3138  ,--40EC00----,18
00000540: 390d 0a                                  9..

注意:「--」是密文,因為它來自真實的 Excel 檔案。

我懷疑這樣的輸出來自於 MS 生產力工具(如 VB)中腳本化產生的 CSV 檔案。

當空的時候,全部都是空的

stat -f "%z %N" *EMPTY.csv   
0 CSV_EMPTY.csv
0 MAC_EMPTY.csv
0 MSDOS_EMPTY.csv

(macOS 12.6 統計 Brown 等人)

 for file in *.csv; do echo $file" "; xxd $file | tail -2; done
CSV.csv 
000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,
MAC.csv
00001260: 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c 0d2c 2c2c  .,,,.,,,.,,,.,,,
00001270: 0d2c 2c2c                                .,,,
MSDOS.csv
000012b0: 0d0a 2c2c 2c0d 0a2c 2c2c 0d0a 2c2c 2c0d  ..,,,..,,,..,,,.
000012c0: 0a2c 2c2c                                .,,,

在這個 Stack Exchange 問題的其他地方回答的是字元編碼差異。

但是 Excel 提供了第四種保存“CSV”的方法,即“CSV UTF-8”

file UTF8_EMPTY.csv 
UTF8_EMPTY.csv: Unicode text, UTF-8 text, with no line terminators
file UTF8.csv      
UTF8.csv: Unicode text, UTF-8 (with BOM) text, with CRLF line terminators

這裡,file更加詳細具體。檔案位元組顯示為:

xxd UTF8_EMPTY.csv 
00000000: efbb bf                                  ...
xxd UTF8.csv      
00000000: efbb bf31 2c32 2c33 0d0a 342c 352c 36    ...1,2,3..4,5,6

所以我們可以看到前三個位元組(位元組順序標記)是好的。我們可以看到UTF-8編碼的CSV檔案使用CR LF終止符,這也不適用於最後一筆記錄。

最後,關於差異還有更多地方可去。如前所述,我想到的是字元編碼、實際分隔符號以及本地化的影響以及與分隔符號匹配的值的引用。

我覺得十一年後為那些希望使用「CSV」以程式方式攝取人類起源的 CSV 檔案進行資料交換的人提供這個警示故事是有用的。我注意到這個 Stack Exchange 問題對於這樣的雄心壯志缺乏精確的文件格式答案。

相關內容