Seite 1 von 1

Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 31. Mai 2021, 20:57
von manwald
Hallo zusammen,

ich hoffe, ihr könnt mir helfen.

Ich habe einen Xiaomi Mi Router 4C, den ich gerne mit OpenWRT flashen möchte. Die dafür benötigten Dateien habe ich hier und sollte eigentlich nur eine 'backup.bat'-Datei starten, die zunächst ein Backup erstellt.

Hier gehen die Probleme allerdings schon los, und ich vermute, dass hat mit meinem 'deutschen' Windows-PC zu tun, denn die Dateien sind alle von englischsprachigen Usern erstellt worden.
Denn nach dem Start der bat-Datei erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "main/main.py", line 19, in <module>
    line4 = subprocess.check_output(["cmd","/c","chcp","437","&","tracert","-d","-h","1","1.1.1.1"]).decode().split("\r\n")[4].strip().split(" ")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 53: invalid start byte
Die 'backup.bat' ist simpel und sieht wie folgt aus:

Code: Alles auswählen

@echo off
python main/main.py
pause
Die aufgerufene main.py habe ich hier hochgeladen:
https://pastebin.pl/view/2ef65ab8

Die im Archiv enthaltene phyton.exe ist Version 3.7.7150.1013, falls das eine Rolle spielt.

Habt ihr eine Ahnung, was der Fehler sein könnte?

Vielen Dank für eure Hilfe und viele Grüße
Mischa

Re: Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 31. Mai 2021, 21:57
von sparrow
Das Python Script ruft mit subprocess.check_output() ein externes Programm auf und möchte dessen Ausgabe verarbeiten. check_output() liefert Bytes zurück, weil das Encoding von dem Output des Programms abhängt, das aufgerufen wurde. Das Script ruft .decode() auf dem Output auf, um es in eine Zeichenkette zu wandeln - und scheitert dann, weil die Bytes offensichtlich nicht UTF-8 kodiert sind.

Re: Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 31. Mai 2021, 22:17
von manwald
Danke für die Erklärung!

Leider ist Python für mich totales Neuland. Hast du einen Tipp, was ich tun kann, um diesen Fehler zu beseitigen?

Re: Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 31. Mai 2021, 22:46
von __deets__
Du kannst das Kommando das da abgesetzt wird auch einfach in der Kommandozeile selbst starten, die 5te (computer zählen ab 0) Zeile nehme, und in das Skript kopieren. Oder “decode()” in dem Skript mit “decode(errors='ignore')” ersetzen, und ein bisschen beten.

Re: Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 31. Mai 2021, 23:05
von manwald
__deets__ hat geschrieben: Montag 31. Mai 2021, 22:46 Du kannst das Kommando das da abgesetzt wird auch einfach in der Kommandozeile selbst starten, die 5te (computer zählen ab 0) Zeile nehme, und in das Skript kopieren. Oder “decode()” in dem Skript mit “decode(errors='ignore')” ersetzen, und ein bisschen beten.
Okay, Danke dir. Werde ich mal versuchen :-)

Re: Fehlermeldung "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81"

Verfasst: Montag 7. Juni 2021, 21:07
von jerch
@manwald

Du initialisiert die Console mit `chcp 437`, d.h. als 8bit encoding CP437. Bin leider zulange aus Windows raus, allerdings würde ich jetzt erwarten, dass `tracert` das als STDOUT encoding zurückliefert, ergo singuläre 8bit Zeichen erlaubt sind. Diese sind dann per Definition nicht UTF8 gängig.

`check_output` kennt ein encoding parameter, versuch mal diesen auf CP-437 zu setzen.