399 Stimmen

UnicodeDecodeError: 'utf8' Codec kann Byte 0x9c nicht dekodieren

Ich habe einen Socket-Server, der UTF-8 gültige Zeichen von Clients empfangen soll.

Das Problem ist, dass einige Kunden (vor allem Hacker) die falsche Art von Daten über das Netz senden.

Ich kann den echten Kunden leicht erkennen, aber ich speichere alle gesendeten Daten in Dateien, damit ich sie später analysieren kann.

Manchmal erhalte ich Zeichen wie dieses œ die die Ursache für die UnicodeDecodeError Fehler.

Ich muss in der Lage sein, die Zeichenfolge UTF-8 mit oder ohne diese Zeichen zu machen.


Aktualisierung:

In meinem speziellen Fall war der Socket-Dienst ein MTA und daher erwarte ich nur ASCII-Befehle wie z. B.:

EHLO example.com
MAIL FROM: <john.doe@example.com>
...

Ich habe all dies in JSON protokolliert.

Dann beschlossen einige Leute, die keine guten Absichten hatten, alle möglichen Arten von Müll zu schicken.

Deshalb ist es für meinen speziellen Fall völlig in Ordnung, die Nicht-ASCII-Zeichen zu entfernen.

1voto

Kai Punkte 299

Ich hatte den gleichen Fehler.

Bei mir beschwerte sich Python über das Byte "0x87". Ich habe es nachgeschlagen unter https://bytetool.web.app/en/ascii/code/0x87/ wo mir gesagt wurde, dass dieses Byte zu dem Codec Windows-1252 gehört.

Ich habe dann nur diese Zeile am Anfang meiner Python-Datei hinzugefügt:

#-*- encoding: Windows-1252 -*-"

Und alle Fehler waren verschwunden. Bevor ich diese Zeile hinzugefügt hatte, hatte ich versucht, die Datei mit Pandas wie folgt zu importieren:

Df = pd.read_csv(data, sep=",", engine='python', header=0, encoding='Windows-1252')

aber dies führte zu einer Fehlermeldung. Also habe ich es wieder so geändert:

Df = pd.read_csv(data, sep=",", engine='python', header=0)

-1voto

Dhinesh Kumar Punkte 81

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X