TLDR? Versuchen:file = open(filename, encoding='cp437)
Warum? Wenn man verwendet:
file = open(filename)
text = file.read()
Python geht davon aus, dass die Datei dieselbe Codepage wie die aktuelle Umgebung verwendet (cp1252 im Fall des Eröffnungsbeitrags) und versucht, sie in ihre eigene Standard-UTF-8 zu dekodieren. Wenn die Datei Zeichen von Werten enthält, die in dieser Codepage nicht definiert sind (wie 0x90), erhalten wir UnicodeDecodeError. Manchmal kennen wir die Codierung der Datei nicht, manchmal wird die Codierung der Datei möglicherweise von Python nicht behandelt (wie z. B. cp790), manchmal kann die Datei gemischte Codierungen enthalten.
Wenn solche Zeichen nicht benötigt werden, kann man sie durch Fragezeichen ersetzen durch:
file = open(filename, errors='replace')
Eine andere Problemumgehung besteht darin, Folgendes zu verwenden:
file = open(filename, errors='ignore')
Die Zeichen bleiben dann intakt, aber auch andere Fehler werden maskiert.
Eine gute Lösung besteht darin, die Codierung anzugeben, jedoch keine Codierung (wie cp1252), sondern die, für die ALLE Zeichen definiert sind (wie cp437):
file = open(filename, encoding='cp437')
Codepage 437 ist die ursprüngliche DOS-Codierung. Alle Codes sind definiert, so dass beim Lesen der Datei keine Fehler auftreten, keine Fehler ausgeblendet werden und die Zeichen erhalten bleiben (nicht ganz intakt, aber dennoch unterscheidbar).