Was ist der Unterschied zwischen - CSV (MS-Dos), CSV (Macintosh), CSV (Komma-getrennt)

Was ist der Unterschied zwischen - CSV (MS-Dos), CSV (Macintosh), CSV (Komma-getrennt)

Was ist der Unterschied zwischen den Dateitypen CSV (MS-Dos), CSV (Macintosh) und CSV (mit Komma getrennt) in Excel 2010? Sie werden alle als sichere Dateitypen aufgeführt, sind aber letztendlich Komma-getrennte Wertedateien.

Antwort1

Der Unterschied zwischen [ihnen] besteht darin, ob Sie bestimmte Sonderzeichen in Textfeldern haben, zum Beispiel ein akzentuiertes (fremdsprachiges) Zeichen. Wenn Sie als Windows CSV exportieren, werden diese Felder mit der Windows-1252-Codepage codiert. Die DOS-Codierung verwendet normalerweise Codepage 437, die Zeichen abbildet, die in alten PCs vor Windows verwendet wurden. Wenn Sie als eine dieser Seiten exportieren und dann mit einem Tool importieren, das die andere Seite erwartet, sieht das meiste gut aus, aber Sie erhalten unerwartete Ergebnisse, wenn Sie zum Beispiel jemanden kennen, dessen Name einen Umlaut (oder ein anderes fremdsprachiges Zeichen) enthält.

Quelle

Antwort2

Was ist der Unterschied zwischen den Dateitypen CSV (MS-Dos), CSV (Macintosh) und CSV (mit Komma getrennt) in Excel?

Verwenden von Excel 16.8 2023 MS365:

Mit file(macOS 12.6 Datei 5.41 Darwin, et al.)

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

Hinweis: fileBietet eine Schätzung und kann je nach Länge des CSV-Formats variable Antworten geben.

Der große Formatunterschied besteht im Vorhandensein von Wagenrücklauf- (CR) und Zeilenvorschub-Bytes (LR), die bei genauerer Betrachtung viel deutlicher werden.

0x0d CR 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 ist das Trennzeichen in den obigen CSVs. Es ist wichtig zu beachten, dass die letzte Zeile KEIN abschließendes 0x0D 0x0A (CSV), 0x0d (MAC) oder 0x0D 0x0A (MSDOS) erhält. Das kann überraschend sein, da ich schon erlebt habe, dass Excel ein zusätzliches 0x0D 0x0A am Ende anfügt, was die Verarbeitungslogik unterbrechen könnte, wenn CR und/oder LF anzeigen, dass es vom Code verwendet wird, um mit der Analyse fortzufahren.

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

Hinweis: „--“ sind Streichungen, da dies aus einer echten Excel-Datei stammt.

Ich vermute, dass solche Ausgaben aus der Skriptgenerierung von CSV-Dateien in MS-Produktivitätstools wie VB stammen.

Wenn leer, sind alle leer

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

(macOS 12.6 Stat Brown et al.)

 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                                .,,,

An anderer Stelle hier in dieser Stack Exchange-Frage werden die Unterschiede bei der Zeichenkodierung beantwortet.

Excel bietet jedoch eine vierte Methode zum Speichern einer CSV-Datei, die uns zu „CSV UTF-8“ führt.

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

Hier fileist es viel ausführlicher und spezifischer. Die Dateibytes werden wie folgt angezeigt:

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

Wir können also sehen, dass die ersten drei Bytes (Byte-Reihenfolgemarkierung) in Ordnung sind. Und wir können sehen, dass UTF-8-codierte CSV-Dateien CR-LF-Terminierungen verwenden, die ebenfalls nicht auf den letzten Datensatz angewendet werden.

Schließlich gibt es noch weitere Möglichkeiten, die Unterschiede zu untersuchen. Wie bereits erwähnt, fallen mir die Zeichenkodierung, die tatsächlichen Trennzeichen und die Auswirkungen der Lokalisierung sowie die Anführung von Werten, die mit dem Trennzeichen übereinstimmen, ein.

Ich hielt es elf Jahre später für sinnvoll, diese warnende Geschichte für diejenigen zu erzählen, die „CSV“ für die programmgesteuerte Aufnahme von CSV-Dateien menschlicher Herkunft zum Datenaustausch nutzen wollten. Mir fiel auf, dass diese Stack Exchange-Frage für ein solches Vorhaben keine präzise Antwort zum Dateiformat enthielt.

verwandte Informationen