J'ai eu ce problème lors de l'utilisation de Python dans un conteneur Docker basé sur Ubuntu 18.04. Il semblait s'agir d'un problème de paramètres régionaux, qui a été résolu en ajoutant ce qui suit au Dockerfile :
ENV LANG C.UTF-8
Il semble que vos paramètres régionaux soient cassés et qu'ils aient un autre problème d'octets->Unicode . La chose que vous avez faite pour Python 2.7 est un hack qui n'a fait que masquer le vrai problème (il y a une raison pour laquelle vous devez reload sys
pour le faire fonctionner).
Pour corriger vos paramètres régionaux, essayez de saisir locale
depuis la ligne de commande. Cela devrait ressembler à :
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
dépend de LANG
étant réglé correctement. Python utilise efficacement locale
pour déterminer quel encodage utiliser lors de l'écriture sur stdout in. Si cela ne fonctionne pas, il est par défaut en ASCII.
Vous devriez d'abord essayer de corriger vos paramètres régionaux. Si locale
erreurs, assurez-vous d'avoir installé le module linguistique approprié pour votre région.
Si tout le reste échoue, vous pouvez toujours réparer Python en définissant PYTHONIOENCODING=UTF-8
. Cela devrait être utilisé en dernier recours car vous masquerez à nouveau les problèmes.
Si Python génère toujours une erreur après avoir défini PYTHONIOENCODING
alors s'il vous plaît mettre à jour votre question avec le stacktrace. Il y a de fortes chances que vous ayez une conversion implicite en cours.