CSV mit deutschen Umlauten (Encoding Problem)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Ich muss eine CSV-Datei verarbeiten die deutsche Umlaute verwendet. Beim Einlesen werden Umlaute und Sonderzeichen falsch dargestellt. Offenbar wurde die falsch encodiert, aber daran kann ich nichts ändern und die Daten kommen immer in diesem (falschen) Format.

Notepad++ zeigt mir die Kodierung als "UTF-8 ohne BOM" an. Momentan behelfe ich mir damit, dass ich die Datei als String einlese und diesen mit UTF-8 decodiere. Anschließend ersetze ich die falschen Zeichen anhand einer Tabelle in die korrekten Zeichen und encodiere alles als ISO-8859-15. Erst danach lese ich das mit dem `csv` Modul ein. Code siehe hier: http://pastebin.com/55FsXVmB (im Code-Schnipsel muss ich noch eine zstzl. Spalte hinzufügen und in dieser einen Substring aus einer anderen, vorhandenen Spalte reinpacken, aber das tut hier nichts zur Sache)

Da man aber nie alle Zeichen vollständig übersetzen kann, möchte ich eine universellere Lösung haben. Im obigen Code-Schnipsel wird bspw. ein m² (die 2 bei Quadratmeter) immer noch falsch dargestellt und andere ausländische Zeichen wie Französische oder Spanische werden auch nicht abgefangen.

Nun habe ich herausgefunden, dass wenn man in Notepad++ nach ANSI konvertiert und dann aber mit UTF-8 darstellt, die Sonderzeichen korrekt zu sehen sind.

Lässt sich das mit Python nachstellen? Ich fummel hier zurzeit nur rum, komme aber nicht weiter... Ordentlich Konvertieren ist denke ich klar, aber den ANSI-codierten String als UTF-8 darstellen... ?
BlackJack

@droptix: Mach mal folgendes mit `data` direkt nachdem es aus der Datei gelesen wurde: ``data = data.decode('utf8').encode('cp1252').decode('utf8')``. Sind die Sonderzeichen dann richtig?
Antworten