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 問題對於這樣的雄心壯志缺乏精確的文件格式答案。