Sollten UTF-8 CSV-Dateien eine Stückliste (Byte Order Mark) enthalten?

37

Unsere Branchen-Software ermöglicht es dem Benutzer, bestimmte Daten als CSV zu speichern . Da in der Natur viele verschiedene Formate (alle als "CSV" bezeichnet) verwendet werden, müssen wir uns entscheiden, wie das "Standardformat" aussehen soll.

  • In Bezug auf Linien- / Feldtrennzeichen und Flucht gibt es einen Standard, den wir verwenden können: RFC 4180 .

  • In Bezug auf die Textkodierung scheint UTF-8 im letzten Jahrzehnt als "Standard-Textdateiformat" aufgetaucht zu sein, daher werden wir dieses verwenden.

Die eine offene Frage lautet: Sollen wir zu Beginn eine Stückliste hinzufügen oder nicht? Ich habe verschiedene Meinungen und Vor- und Nachteile zur Verwendung von Stücklisten im Allgemeinen gelesen, aber gibt es eine "offizielle" Empfehlung oder zumindest eine Art von Community-Konsens zur Verwendung von Stücklisten in CSV-Dateien?

Heinzi
quelle
7
Wenn es eine Stückliste hat, dann ist es nicht UTF-8. Aber welches Format wollen die Programme? Wenn sie eine Stückliste (hauptsächlich Faultier) benötigen, müssen Sie eine hinzufügen, aber UTF-8 + Stückliste ≠ UTF-8.
Strg-Alt-Delor
3
Auch wenn CSV anscheinend einfacher zu generieren ist, gibt es so viele Kompatibilitätsprobleme, insbesondere wenn Sie nicht mit reinem 7-Bit-ASCII arbeiten. Ich würde Ihnen dringend empfehlen, tatsächliches XLSX zu generieren, wenn Benutzer es öffnen möchten in Excel (anstatt es in einer anderen Software erneut zu importieren. In diesem Fall müssen Sie Optionen für Trennzeichen, Codierung usw. angeben). Es gibt Bibliotheken für die meisten Sprachen, und Sie sparen Ihnen und Ihren Benutzern viel Zeit.
Jcaron
2
Wenn Sie die CSV-Route einschlagen, überprüfen Sie, was passiert, wenn Sie die Datei sowohl auf dem Mac als auch auf dem PC öffnen, idealerweise mit mehreren Versionen von Excel. Beachten Sie auch, dass einige Excel-Versionen nicht dasselbe Verhalten aufweisen, wenn Sie auf die Datei doppelklicken, um sie zu öffnen, oder die Datei über das Menü öffnen.
Jcaron
2
Warum ist es wichtig, wenn es korrekt in Excel geöffnet wird? Nichts in der Frage besagt, dass Excel in der Lage sein muss, die generierte Datei zu analysieren ...
Rubenvb

Antworten:

55

Nicht für UTF-8 , aber beachten Sie die verschiedenen Einschränkungen in den Kommentaren.

Dies ist im Gegensatz zu UTF-16/32 nicht erforderlich (UTF-8 hat keine Bytereihenfolge) und wird im Unicode-Standard nicht empfohlen . Es ist auch recht selten, dass UTF-8 mit Stücklisten "in the wild" angezeigt wird. Wenn Sie also keinen gültigen Grund haben (z. B. wie bereits erwähnt, arbeiten Sie mit Software, die die Stückliste erwartet), würde ich den Ansatz ohne Stücklisten empfehlen .

Wikipedia erwähnt hauptsächlich Microsoft-Software, die eine Stückliste erzwingt und erwartet. Verwenden Sie sie jedoch nicht, es sei denn, Sie arbeiten damit.

Kayaman
quelle
28
Es gibt auch weit verbreitete Software, die eine Stückliste benötigt: Excel benötigt eine Stückliste, um eine CSV-Datei korrekt als UTF-8 und nicht als "ANSI", dh als lokales Kompatibilitätsgebietsschema, zu identifizieren. (Da Excel beim Speichern einer solchen Datei jedoch auch seltsame Dinge tut , empfehlen wir Benutzern, unseren "echten" Excel-Export anstelle des CSV-Exports zu verwenden, wenn sie die Datei mit Excel öffnen möchten.)
Heinzi
21
@Heinzi Ich habe vor langer Zeit erfahren, dass man mit CSV und Excel nicht wirklich gewinnen kann. Es ist einfach ein mieser CSV-Leser. Schade, dass es das ist, was normale Benutzer erwarten.
Pipe
9
@Voo: Das Erfordernis einer Stückliste für UTF-8 verstößt zweifellos gegen den Standard, da es " weder erforderlich noch empfohlen " ist.
Deduplizierer
12
@ Deduplicator: MS-DOS- und Windows-Systeme verfügen über eine große Basis an Legacy-Textdateien in anderen Codierungen als UTF-8. Mithilfe von Qualitätsanwendungen kann ein Benutzer angeben, wie eine Textdatei beim Öffnen codiert wird, enthält jedoch häufig eine "Auto" -Option. Wenn ein Benutzer "UTF-8" auswählt, wird eine UTF-8-Datei mit oder ohne Stückliste korrekt geöffnet. Wenn ein Benutzer "auto" auswählt, werden einige UTF-8-Dateien, die keine Stückliste haben, möglicherweise fälschlicherweise als mit einer anderen Codierung identifiziert. Ich bin nicht sicher, was man von einer Anwendung erwarten würde, da Dateien, die "falsch identifiziert" wurden, bitweise identisch sein könnten mit ...
supercat
7
@Voo: Dies steht im Widerspruch zu vielen anderen formatspezifischen Anforderungen, bei denen eine Stückliste illegal ist. Beispielsweise ist ein Shell-Skript mit einer Stückliste vor dem #!ungültig. Bestenfalls ist eine Stückliste in UTF-8 "erlaubt, wenn keine format- / anwendungsspezifischen Anforderungen dies ausschließen", nicht "erlaubt" und sollte als solche nicht verwendet werden. Die Standards sind eigentlich klar über die sollte nicht.
R ..
8

Es gibt immer noch keine weit verbreitete Konvention AFAIK, obwohl UTF-8 mittlerweile allgemein anerkannt ist.

Die Stückliste ist ein schreckliches Artefakt:

Es ist unsichtbar (Raum mit der Breite Null).

Einige Softwareprogramme brechen möglicherweise beim Namen der ersten Spalte ab, die nicht nur Buchstaben, sondern die seltsame Stückliste vor sich enthält.

Die Kopfzeile wird möglicherweise für Wertzeilen kopiert, die den ersten Wert beschädigen.

Es wird nur von einigen Windows-Programmen benötigt, um zwischen einer der von diesem lokalen Windows-Computer verwendeten ANSI-Codierungen und UTF-8 zu unterscheiden. Notizblock, Excel.

Das Traurige ist also, dass man die Stückliste unterstützen sollte. Möglicherweise optional.

Verwenden Sie ein Benennungsschema für die Dateien (...- utf8.txt, ...- utf8bom.txt).


In vielen Fällen könnten wir HTML als Exportalternative verwenden. Dies ermöglicht das Festlegen der Codierung in der Datei. Ein zusätzliches Feature ist die Hintergrund- / Vordergrundfärbung von Zeilen und Zellen. Das erhöht die Qualität des Exports.

Joop Eggen
quelle
15
Ob die Formatierung "die Qualität des Exports erhöht", hängt stark vom Verwendungszweck der Datei ab. CSV wird häufig als einfaches maschinenlesbares Format verwendet, und das Parsen von HTML durch den Empfänger wäre in diesem Fall ein großer Nachteil .
IMSoP
5
Wenn Sie sich für ein Namensschema entscheiden, sollten Sie die Zielgruppe berücksichtigen. -utf8-windows.csvist besser. Fast jeder weiß, was Windows im Kontext von Computern ist, aber weit weniger Benutzer wissen, was ein Byte Order Mark ist.
MSalters
2
@Davislor ja wenn es sich um einen breit kommunizierten bekannten Standard handelt. Andernfalls werden Fehlerberichte tschüßals Müll gemeldet, tschüßobwohl sie geschrieben worden sein sollten. Bei vielen IT-Fehlern in StackOverflow geht es um Codierungen. Endbenutzer werden ebenfalls Probleme haben.
Joop Eggen
3
@JoopEggen "Bekannter Standard breit kommuniziert" in welcher Community genau? Ich mache jetzt seit fast 10 Jahren Softwareentwicklung und habe das noch nie gesehen - nicht einmal unter Windows und schon gar nicht unter Linux oder OSX, wo Sie sich fast immer mit utf-8 befassen.
Cubic
1
@JustinTime ja schon seit einigen Jahren, aber nicht vorher. Die MS-Entwickler sind nicht so schlecht (Posix-Konformität, jetzt UTF-8-Unterstützung).
Joop Eggen