Ho riscontrato questo problema durante l'utilizzo di Python all'interno di un contenitore Docker basato su Ubuntu 18.04. Sembrava essere un problema locale, che è stato risolto aggiungendo quanto segue al Dockerfile:
ENV LANG C.UTF-8
Sembra che la tua localizzazione sia non funzionante e abbia un altro problema di byte->Unicode . La cosa che hai fatto per Python 2.7 è un hack che ha solo mascherato il vero problema (c'è un motivo per cui devi reload sys
per farlo funzionare).
Per correggere il tuo locale, prova a digitare locale
dalla riga di comando. Dovrebbe essere simile a:
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
dipende da LANG
essere impostato correttamente. Python utilizza efficacemente locale
per capire quale codifica usare quando si scrive su stdout. Se non riesce a risolverlo, il valore predefinito è ASCII.
Dovresti prima tentare di correggere la tua lingua. Se locale
errori, assicurati di aver installato il language pack corretto per la tua regione.
Se tutto il resto fallisce, puoi sempre correggere Python impostando PYTHONIOENCODING=UTF-8
. Questo dovrebbe essere usato come ultima risorsa poiché mascherare ancora una volta i problemi.
Se Python continua a generare un errore dopo aver impostato PYTHONIOENCODING
quindi aggiorna la tua domanda con lo stacktrace. È probabile che tu abbia una conversione implicita in corso.