Können Sie CR / LF in CSV-Dateien codieren?

71

Ist es möglich / legal, CR / LF-Zeichen irgendwie in eine CSV-Datei zu kodieren?

(als Teil eines CSV-Standards?)

Wenn ja, wie soll ich CR / LF codieren?

Tore Nestenius
quelle

Antworten:

86

Ja, Sie müssen Anführungszeichen setzen:

"some value
over two lines",some other value

Aus diesem Dokument , dem allgemein anerkannten CSV-Standard:

Ein Feld, das eingebettete Zeilenumbrüche enthält, muss in doppelte Anführungszeichen gesetzt werden

Kent Boogaart
quelle
6
Ist das nicht allgemein akzeptierte Format RFC 4180? en.wikipedia.org/wiki/Comma-separated_values
HaveAGuess
2
Der Wikipedia-Artikel sagt auch "... (viele CSV-Implementierungen unterstützen jedoch keine eingebetteten Zeilenumbrüche)."
Dansalmo
1
@HaveAGuess RFC 4180 sagt hier dasselbe. Seite 2, Punkt 6.
jpmc26
5
@ jpmc26 in der Tat, ich versuche nur, OP zu ermutigen, Besucher zum offiziellen RFC zu schicken, anstatt zu behaupten, dass diese andere Seite der 'allgemein akzeptierte CSV-Standard' ist
HaveAGuess
Auch nach dem Hinzufügen von doppelten Anführungszeichen werden die Daten in eine neue Zelle eingefügt.
Vikas Etagi
17

Die häufigste Variante von CSV, die Excel-kompatibel ist, ermöglicht eingebettete Zeilenumbrüche, solange das Feld von doppelten Anführungszeichen umgeben ist.

foo,bar,"blah blah
more blah blah",baz

oder

foo,bar,"blah blah
more blah blah"

oder

"blah blah
more blah blah",baz

sind alle gültig. Dieser Mechanismus ermöglicht auch eingebettete Kommas.

Die Verwendung von Anführungszeichen um Textfelder ohne eingebettete neue Zeilen (oder Kommas) ist ebenfalls in Ordnung. Wenn der Text selbst ein doppeltes Anführungszeichen enthält, besteht der Mechanismus zum Entkommen darin, beispielsweise zwei zusammenzufügen.

foo,bar,"this person said ""blah blah 
more blah blah""",baz

Das Schreiben eines CSV-Readers, der dies korrekt handhabt, kann schwierig sein (insbesondere, wenn Sie sich auf reguläre Ausdrücke verlassen).

ShuggyCoUk
quelle
1
Was ist, wenn ich ein Angebot einbetten möchte?
Towc
8

Hier wurde ein Standard für CSV erwähnt. Es würde mich interessieren, mehr darüber zu erfahren - die einzigen Standards, die mir bekannt sind, sind


quelle
1
Ja, der RFC, mit dem Sie verknüpfen, ist der endgültige Standard. Es wird erwähnt, dass CRLF in doppelte Anführungszeichen gesetzt wird, um dem zu entkommen. Leider ist Ihr Standpunkt zu dem, was Excel akzeptiert, gültig ... ein weiterer Fall, in dem MS versucht, Standards zu untergraben.
Rmeador
2
Dieser RFC wurde 2005 erstellt! Excel unterstützt CsV schon viel länger als das ...
ShuggyCoUk
1
ShuggyCoUk, das letzte Update, wurde lange zuvor erstellt: en.wikipedia.org/wiki/Comma-separated_values
HaveAGuess
0

Ich denke nicht, dass es Teil des Standards ist (wenn es überhaupt einen gibt), aber Sie könnten Standard-C-Escape verwenden, dh codieren \ r \ n.

Beachten Sie jedoch, dass Sie in diesem Fall auch das Escape-Zeichen codieren sollten - dh \ yield \ nach dem Decodieren.

Randolpho
quelle
4
CSV verwendet kein C-Style Escape
1
Einige CSV-Apps unterstützen dieses Formular. csv ist ein bedauerlicherweise schlecht definierter Standard. Excel CSV zu sprechen ist (pragmatisch) das Beste, was dies nicht ist
ShuggyCoUk