Sie exportieren eine Tabelle. Sie öffnen die CSV-Datei. Statt „José" steht dort „José". Statt „€" steht dort „€". Statt eines Gedankenstrichs „â€"".
Willkommen in der Encoding-Hölle.
Dieser Leitfaden erklärt, warum das passiert und wie man es behebt — ob man manuell exportiert oder Extraktionstools entwickelt.
Was tatsächlich passiert
Zeichenkodierung bestimmt, wie Computer Text als Bytes darstellen. Verschiedene Kodierungen verwenden unterschiedliche Bytemuster für dasselbe Zeichen.
Der häufigste Übeltäter: UTF-8 wird als Latin-1 interpretiert (oder umgekehrt).
UTF-8 verwendet mehrere Bytes für Nicht-ASCII-Zeichen. Wenn Software diese Bytes als Latin-1 (Ein-Byte-Kodierung) liest, wird jedes Byte zu einem separaten falschen Zeichen.
| Zeichen | UTF-8 Bytes | Fehlinterpretiert als Latin-1 |
|---|---|---|
| é | C3 A9 | é |
| € | E2 82 AC | € |
| — | E2 80 94 | â€" |
| ñ | C3 B1 | ñ |
Das Muster ist konsistent: Multibyte-Sequenzen werden zu mehreren falschen Zeichen.
Wo das Encoding bricht
1. Die Quellseite
Die Website deklariert möglicherweise eine Kodierung, liefert aber eine andere. Oder deklariert gar nichts und lässt den Browser raten.
<!-- Deklariert UTF-8 -->
<meta charset="UTF-8">
<!-- Aber der Server sendet -->
Content-Type: text/html; charset=ISO-8859-1
Wenn Deklarationen sich widersprechen, finden Browser meist die richtige Lösung. Export-Tools möglicherweise nicht.
2. Der Exportprozess
Wenn das Extraktionstool die Kodierung nicht bewahrt, werden Bytes neu interpretiert.
JavaScripts textContent liefert Unicode-Strings, was sicher ist. Aber die Konvertierung in eine Datei erfordert die Wahl einer Kodierung. Ist diese Wahl falsch, kommt es zur Beschädigung.
3. Die Anwendung, die die Datei öffnet
Sie exportieren eine gültige UTF-8-CSV. Excel öffnet sie als Latin-1, weil es falsch rät. Gleiche Beschädigung, andere Ursache.
Deshalb sieht dieselbe Datei in einer Anwendung korrekt aus und in einer anderen nicht.
So diagnostizieren Sie das Problem
Mustererkennung
Bestimmte Beschädigungen sind diagnostisch:
| Sie sehen | Original war |
|---|---|
| á, é, Ã, ó, ú | á, é, í, ó, ú (Spanische Akzente) |
| ä, ö, ü | ä, ö, ü (Deutsche Umlaute) |
| ç | ç (Cedille) |
| € | € (Eurozeichen) |
| â€" | — (Geviertstrich) |
| ’ | ' (Typografisches Apostroph) |
Wenn Sie à gefolgt von einem weiteren Zeichen sehen, wurde UTF-8 als Latin-1 gelesen.
Die rohen Bytes prüfen
In Python:
with open('datei.csv', 'rb') as f:
print(f.read(100))
Wenn Sie \xc3\xa9 sehen, wo Sie „é" erwarten, ist die Datei UTF-8. Wenn Sie \xe9 sehen, ist es Latin-1.
Prüfen was die Seite deklariert
In den Browser-Entwicklertools:
document.characterSet // Gibt die tatsächlich verwendete Kodierung zurück
Beschädigte Dateien reparieren
Der Neu-Kodierungs-Trick
Wenn UTF-8 als Latin-1 fehlinterpretiert wurde, kann man es umkehren:
# Als Latin-1 lesen (wie es fälschlicherweise interpretiert wurde)
with open('beschaedigt.csv', 'r', encoding='latin-1') as f:
text = f.read()
# Zurück zu Latin-1-Bytes kodieren, dann als UTF-8 dekodieren
fixed = text.encode('latin-1').decode('utf-8')
with open('repariert.csv', 'w', encoding='utf-8') as f:
f.write(fixed)
Das funktioniert nur bei einfacher Fehlinterpretation. Doppelte Beschädigung oder gemischte Kodierungen sind schwieriger.
Excel zwingen, UTF-8 zu lesen
Excel ignoriert UTF-8 oft. Zwei Workarounds:
Option 1: BOM hinzufügen
Ein Byte Order Mark am Dateianfang signalisiert UTF-8:
with open('datei.csv', 'w', encoding='utf-8-sig') as f:
f.write(data)
Option 2: Import-Assistent
Statt die CSV doppelt zu klicken: Daten → Aus Text/CSV und UTF-8-Kodierung manuell auswählen.
Google Sheets als Zwischenschritt
Google Sheets behandelt Encoding besser als Excel. Die CSV dort importieren, dann als XLSX exportieren. Die Excel-Datei bewahrt die Zeichen korrekt.
Encoding-Probleme vermeiden
Beim manuellen Export
Tools verwenden, die Encoding korrekt handhaben. HTML Table Exporter bewahrt Unicode durchgängig im Exportprozess und vermeidet die Konvertierungsfehler, die zu Mojibake führen.
Für CSV-Exporte: Wenn das Tool Encoding-Optionen bietet, UTF-8 mit BOM für Excel-Kompatibilität wählen.
Beim Entwickeln von Extraktionstools
Encoding immer explizit angeben:
# CSV schreiben
with open('ausgabe.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
# HTML lesen
response = requests.get(url)
response.encoding = response.apparent_encoding # Auto-Erkennung
html = response.text
Für JavaScript/Browser-Erweiterungen:
// Blob mit explizitem Encoding
const blob = new Blob(['\ufeff' + csvContent], {
type: 'text/csv;charset=utf-8;'
});
Das \ufeff ist das BOM, das Excel hilft.
Bei der Verwendung von Pandas
# Lesen
df = pd.read_csv('datei.csv', encoding='utf-8')
# Schreiben mit BOM für Excel
df.to_csv('ausgabe.csv', encoding='utf-8-sig', index=False)
Sonderzeichen, die Probleme verursachen
Typografische Anführungszeichen und Apostrophe
Textverarbeitungen konvertieren gerade Anführungszeichen in typografische:
- ' → ' (U+2019)
- " → „ " (U+201C, U+201D)
Diese sind in UTF-8 mehrbytrig und brechen in Latin-1.
Geviert- und Halbgeviertstriche
- — (Geviertstrich, U+2014)
- – (Halbgeviertstrich, U+2013)
Häufig in Finanzdaten und Verlagswesen.
Geschützte Leerzeichen
Normales Leerzeichen ist 0x20. Geschütztes Leerzeichen ist 0xA0 (Latin-1) oder 0xC2 0xA0 (UTF-8).
Diese sind unsichtbar, aber brechen Stringvergleiche und Parsing.
# Leerzeichen normalisieren
text = text.replace('\xa0', ' ')
Währungssymbole
€, £, ¥ liegen alle außerhalb von ASCII und werden in UTF-8 vs. Latin-1 unterschiedlich kodiert.
Kurzreferenz
| Problem | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Ã gefolgt von Zeichen | UTF-8 als Latin-1 gelesen | Neu kodieren oder UTF-8 beim Import angeben |
| ? oder □ ersetzen Zeichen | Kodierung unterstützt Zeichen nicht | Durchgängig UTF-8 verwenden |
| Excel zeigt Zeichensalat | Excel hat falsche Kodierung geraten | UTF-8 BOM oder Import-Assistent verwenden |
| Unsichtbare Zeichen brechen Daten | Geschützte Leerzeichen oder Zero-Width-Zeichen | Leerzeichen normalisieren |
Die Grundregel
Kodierung bei jedem Schritt abstimmen. Als UTF-8 exportieren. Als UTF-8 öffnen. Als UTF-8 speichern.
Sobald ein Schritt eine andere Kodierung verwendet, werden Zeichen beschädigt.
Im Zweifelsfall ist UTF-8 mit BOM die sicherste Wahl für Dateien, die mit Excel in Berührung kommen.
Einen praktischen Vergleich der besten Tools für sauberen Tabellenexport finden Sie in unserem Artikel zu HTML-Tabellen-Scrapern für Chrome.
Exporte mit korrektem Encoding? Erfahren Sie mehr auf gauchogrid.com/de/html-table-exporter oder probieren Sie HTML Table Exporter kostenlos im Chrome Web Store aus.
Top comments (0)