Seite 1 von 1

Python encoding

Verfasst: Mittwoch 6. Oktober 2021, 20:14
von reneschmidt
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?

Re: Python encoding

Verfasst: Mittwoch 6. Oktober 2021, 20:33
von Sirius3
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: