Python encoding

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
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

Moin zusammen,

folgendes Problem:
ich befinde mich auf einem Ubuntu System und möchte csv Dateien lesen, die mir ein Windowssystem zur Verfügung stellt.

Die CSVs sind im ANSI Format und könnten Umlaute enthalten.

Mein Pythonscript läuft natürlich als UTF8

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
Die CSVs öffne ich mit folgenden Befehl:

Code: Alles auswählen

with open("import/import.csv", 'r')
Sobald ich einen Umlaut in der Datei habe, fällt das Script mit folgender Meldung hin:

Code: Alles auswählen

File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in position 75: ordinal not in range(128)
Nach etwas googlen habe ich die Hinweise gefunden, dass ich beim öffnen die codierung mit geben kann:

Code: Alles auswählen

with open("import/import.csv", 'r', encoding='utf-8')
Leider hilft das auch nur bedingt weiter:

Code: Alles auswählen

  File "/usr/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 75: invalid continuation byte
Hat jemand einen Hinweis für mich wie ich dieses Bescheiden Problem zuverlässig umgehen kann?
Sirius3
User
Beiträge: 18275
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie Du selbst schreibst, ist die Datei NICHT utf8-kodiert, warum versuchst Du das dann?
Das korrekte Encoding ist vermutlich CP1252.
csv-Dateien müssen auch immer mit newline="" geöffnet werden:

Code: Alles auswählen

with open("import/import.csv", encoding="CP1252", newline="") as csv_file:
Antworten