HandyTools Hub

← Alle Anleitungen

Häufige CSV-Probleme: Encoding-Mojibake, Trennzeichen und Excel-Fallen

2026-08-06

CSV ist wohl das älteste und am weitesten verbreitete Datenaustauschformat der Welt. Es sieht trivial einfach aus — nur Text, durch Kommas getrennt, oder? Doch wer je CSV-Dateien aus verschiedenen Systemen oder von Kollegen in anderen Ländern bearbeitet hat, ist auf die Minen getreten: Mojibake beim Öffnen, alle Spalten in eine Zelle gequetscht, sorgfältig gepflegte IDs in wissenschaftliche Notation verstümmelt. All diese Probleme führen auf eine einzige Grundursache zurück: CSV hatte nie einen wirklich universellen Standard.

Warum CSV keinen echten Standard hat

CSV ist älter als das Internet. Jedes System implementierte seine eigene Variante, lange bevor jemand etwas aufschrieb. RFC 4180 kam 2005, beschreibt aber nur nachträglich die gängige Praxis, und viele Implementierungen ignorieren ihn. In freier Wildbahn begegnen Ihnen:

  • Trennzeichen, die Kommas, Semikolons, Tabulatoren oder sogar Pipes sein können
  • Inkonsistente Quote-Escaping-Regeln (manche nutzen "", andere \")
  • Zeilenenden in \n (Unix), \r\n (Windows) oder \r (klassischer Mac)
  • Kodierungen von UTF-8 über GBK und Latin-1 bis zu mehr

Die erste Regel beim Umgang mit einer unbekannten CSV lautet also: Nehmen Sie nichts an, prüfen Sie zuerst. Werfen Sie die Datei in einen CSV-Viewer — er erkennt Komma-, Semikolon- und Tabulator-Trenner automatisch und rendert die Daten als Tabelle, sodass Sie die echte Struktur auf einen Blick sehen, statt Kommas in einem Texteditor zu zählen.

UTF-8-BOM und verstümmelter Text in Excel

Ein klassisches Problem für alle, die mit Nicht-ASCII-Daten arbeiten: Ihr Programm exportiert eine vollkommen gültige UTF-8-CSV, jemand doppelklickt sie in Excel, und alle chinesischen (oder akzentuierten oder kyrillischen) Zeichen werden zu Mojibake. Der Grund: Unter Windows interpretiert Excel unmarkierte CSV-Dateien mit der Alt-Locale-Kodierung des Systems — GBK auf einem chinesischen System zum Beispiel — und dekodiert die UTF-8-Bytes falsch.

Die Lösung ist, der Datei eine UTF-8-BOM (die drei Bytes EF BB BF) voranzustellen. Sieht Excel diese Markierung, dekodiert es die Datei korrekt als UTF-8. In Python ist das eine Wortänderung:

df.to_csv('output.csv', encoding='utf-8-sig')

Umgekehrt: Erhalten Sie eine verstümmelte CSV von jemand anderem, raten Sie nicht zufällig an Kodierungen herum. Bestätigen Sie zuerst die tatsächliche Kodierung — VS Code zeigt sie in der Statusleiste, und der Befehl file erkennt sie auf der Kommandozeile — und transkodieren Sie die Datei dann oder öffnen Sie sie ausdrücklich mit dieser Kodierung.

Komma, Semikolon, Tabulator: regionale Unterschiede

In den meisten englischsprachigen Ländern bedeutet CSV kommagetrennt. Doch viele europäische Länder (Deutschland, Frankreich, Italien und andere) nutzen ein Dezimalkomma — die Zahl 3,14 wird 3,14 geschrieben. Würden diese Dateien auch Kommas zwischen den Spalten nutzen, würde jede Zahl zerplatzen. Excel-Installationen in diesen Locales exportieren CSV also standardmäßig mit Semikolons.

Deshalb ist „die Datei, die mein Kollege geschickt hat, öffnet mit allen Spalten in der ersten Zelle“ fast immer ein Trennzeichen-Mismatch: Der Parser trennt an Kommas, während die Datei Semikolons nutzt. So kommen Sie damit zurecht:

  • Erkennen Sie das Trennzeichen vor dem Parsen oder nutzen Sie ein Werkzeug, das es automatisch erkennt
  • Einigen Sie sich beim Datenaustausch zwischen Systemen explizit auf das Trennzeichen und dokumentieren Sie es
  • Müssen Sie von Hand bearbeiten, ist tabulatorgetrennt (TSV) die Variante, die am seltensten mit echten Inhalten kollidiert

Eingebettete Zeilenumbrüche und Quote-Escaping

RFC 4180 sagt: Enthält ein Feld das Trennzeichen, ein doppeltes Anführungszeichen oder einen Zeilenumbruch, muss das ganze Feld in doppelte Anführungszeichen gesetzt werden, und jedes doppelte Anführungszeichen im Feld wird als zwei doppelte Anführungszeichen geschrieben. Ein legaler Datensatz kann so aussehen:

1001,"He said ""let's discuss the price"" and hung up","Note:
follow up next week",2026-08-06

Dieser Datensatz enthält einen Zeilenumbruch und ist dennoch ein Datensatz, nicht drei. Naive Parser, die „Zeile für Zeile lesen, dann an Kommas trennen“, zerfallen bei solchen Dateien sofort — Zeilenzahlen werden falsch, Spaltenzahlen werden falsch, Daten bluten über Spalten. Parst Ihr Programm CSV, nutzen Sie die ausgereifte CSV-Bibliothek, die mit Ihrer Sprache kommt (Pythons csv-Modul, csv-parse für Node und so weiter). Sie alle behandeln Quoting und eingebettete Zeilenumbrüche korrekt. Bauen Sie niemals split(',') von Hand.

Excels „Hilfsbereitschaft“: wissenschaftliche Notation und Daten

Öffnet Excel eine CSV, errät es für jedes Feld einen Typ, und diese „Intelligenz“ hat unermessliche Datenmengen zerstört:

  • Die ID 0012345 wird zur Zahl 12345; die führenden Nullen sind weg
  • Lange Zahlen — Personalausweisnummern, Sendungsnummern — werden zu wissenschaftlicher Notation wie 6.21E+17, mit dauerhaftem Präzisionsverlust
  • Werte wie 3-4 oder MAR1 werden als Daten interpretiert und zu 4-Mar oder 1-Mar
  • Die Genetik-Community benannte das Gen MARCH1 berühmt-berüchtigt in MARCHF1 um, weil zu viele Datensätze es automatisch in ein Datum umgewandelt hatten

Die entscheidende Einsicht: Der Schaden geschieht in dem Moment, in dem die Datei geöffnet wird, und einmal gespeichert ist er unumkehrbar. Abhilfen:

  1. Doppelklicken Sie eine CSV nicht, nur um Rohdaten anzusehen — nutzen Sie zuerst einen Texteditor oder einen CSV-Viewer
  2. Müssen Sie in Excel arbeiten, nutzen Sie Daten → Aus Text/CSV und setzen Sie ID-Spalten im Importassistenten explizit auf „Text“
  3. Programme, die CSV exportieren, sollten ID-artige Felder quoten oder, besser, die Pipeline so gestalten, dass Excel die Rohdatei nie berührt

Strategien für sehr große Dateien

CSVs von mehreren hundert Megabyte oder mehr sind üblich — Log-Exporte, Transaktionshistorien. Drei Regeln dafür: Öffnen Sie sie nicht in Excel (es hat ein hartes Limit von 1.048.576 Zeilen und hängt lange davor), lesen Sie sie nicht vollständig in den Speicher, und importieren Sie sie nirgendwo, bevor Sie die Struktur bestätigt haben.

Wählen Sie das Werkzeug nach dem, was Sie tatsächlich brauchen:

  • Nur Form und erste Zeilen gewünscht: head -n 20 file.csv ist am schnellsten; für eine richtige Tabellenansicht laden Sie die Datei (oder einen Ausschnitt) in den CSV-Viewer, der das Trennzeichen erkennt, Zeilen- und Spaltenzahlen meldet und Sortierung per Spalte erlaubt
  • Filtern und Aggregieren nötig: Kommandozeilenwerkzeuge wie xsv oder csvkit fragen große Dateien direkt ab, ohne sie ganz zu laden
  • Eine Analyse-Pipeline speisen: In Python pandas.read_csv(..., chunksize=100000) für chunkweises Lesen nutzen oder zuerst in ein spaltenorientiertes Format wie Parquet konvertieren

Noch ein Hinweis zum Datenfluss: Daten reisen oft als JSON zwischen Systemen und landen als CSV auf der Festplatte, und die Konvertierung ist, wo Typinformation still stirbt — Zahlen werden Zeichenketten, Nullwerte werden leere Zellen. Müssen Sie diese Konvertierung machen, behandelt das JSON-zu-CSV-Tool einfache flache Strukturen; prüfen Sie zuerst, ob Ihr JSON verschachtelt ist, denn verschachtelte Strukturen müssen vorher abgeflacht werden, oder Spalten verlieren still Daten.

Zum Schluss

Jedes CSV-Problem lässt sich auf einen Satz zurückführen: Es sieht aus wie Text, verhält sich aber wie ein Protokoll. Bestätigen Sie die Kodierung, erkennen Sie das Trennzeichen, überlassen Sie Quoting-Regeln ausgereiften Bibliotheken, verteidigen Sie sich gegen Excels Typ-Raten und nutzen Sie Streaming-Werkzeuge für große Dateien. Machen Sie daraus eine feste Checkliste für jede unbekannte CSV, und Sie umgehen jede klassische Falle, die dieses Format Menschen seit Jahrzehnten gestellt hat.