Ich hatte dieses Problem, als ich Python in einem Docker-Container auf Basis von Ubuntu 18.04 verwendete. Es schien ein Gebietsschema-Problem zu sein, das durch Hinzufügen des Folgenden zur Docker-Datei gelöst wurde:
ENV LANG C.UTF-8
Es hört sich so an, als ob Ihr Gebietsschema defekt ist und ein weiteres Bytes->Unicode-Problem vorliegt . Das, was Sie für Python 2.7 gemacht haben, ist ein Hack, der das eigentliche Problem nur verschleiert hat (es gibt einen Grund, warum Sie reload sys
damit es funktioniert).
Um Ihr Gebietsschema zu korrigieren, versuchen Sie, locale
einzugeben von der Kommandozeile. Es sollte in etwa so aussehen:
LANG=en_GB.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_ALL=
locale
hängt von LANG
ab richtig eingestellt werden. Python verwendet effektiv locale
um herauszufinden, welche Kodierung verwendet werden soll, wenn in stdout geschrieben wird. Wenn es nicht funktioniert, wird standardmäßig ASCII verwendet.
Sie sollten zuerst versuchen, Ihr Gebietsschema zu korrigieren. Wenn locale
Fehler, vergewissern Sie sich, dass Sie das richtige Sprachpaket für Ihre Region installiert haben.
Wenn alles andere fehlschlägt, können Sie Python jederzeit reparieren, indem Sie PYTHONIOENCODING=UTF-8
setzen . Dies sollte als letzter Ausweg verwendet werden, da Sie erneut Probleme maskieren.
Wenn Python nach dem Setzen von PYTHONIOENCODING
immer noch einen Fehler auslöst dann aktualisieren Sie bitte Ihre Frage mit dem Stacktrace. Es besteht die Möglichkeit, dass eine implizite Conversion stattfindet.