Durante il piping dell'output di un programma Python, l'interprete Python viene confuso riguardo alla codifica e lo imposta su Nessuno. Ciò significa che un programma come questo:
# -*- coding: utf-8 -*-
print u"åäö"
funzionerà bene quando eseguito normalmente, ma non riesce con:
UnicodeEncodeError: il codec 'ascii' non può codificare il carattere u '\ xa0' in posizione 0: ordinale non compreso nell'intervallo (128)
se utilizzato in una sequenza di tubi.
Qual è il modo migliore per farlo funzionare durante il piping? Posso solo dirgli di usare qualunque codifica shell / filesystem / qualunque cosa stia usando?
I suggerimenti che ho visto finora sono di modificare direttamente il tuo site.py o di codificare il codice predefinito usando questo trucco:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
Esiste un modo migliore per far funzionare le tubazioni?
chcp 65001
prima di eseguire lo script. Questo può avere problemi, ma spesso aiuta e non richiede molta digitazione (meno di set PYTHONIOENCODING=utf_8
).
setx PYTHONENCODING utf-8
di renderlo permanente se vuoi salvare la digitazione.