>>> print 'абвгд'
абвгд
Quando si digitano alcuni caratteri, il terminale decide come questi caratteri vengono rappresentati nell'applicazione. Il tuo terminale potrebbe dare i caratteri all'applicazione codificata come utf-8, ISO-8859-5 o anche qualcosa che solo il tuo terminale capisce. Python ottiene questi caratteri come una sequenza di byte. Quindi python stampa questi byte così come sono e il tuo terminale li interpreta in qualche modo per visualizzare i caratteri. Dal momento che il terminale di solito interpreta i byte allo stesso modo in quanto codificato loro prima, tutto è visualizzato come digitato in.
>>> u'абвгд'
Qui si digita alcuni caratteri che arrivano al l'interprete Python come una sequenza di byte, forse codificato in qualche modo dal terminale. Con il prefisso u
python tenta di convertire questi dati in unicode. Per farlo correttamente Python deve sapere quale codifica utilizza il tuo terminale. Nel tuo caso sembra che Python pensi che la codifica dei tuoi terminali sia ASCII, ma i dati ricevuti non corrispondono a quelli, quindi ottieni un errore di codifica.
Il modo dritto in avanti per creare stringhe Unicode in una sessione interattiva sarebbe quindi essere qualcosa di simile a questo:
>>> us = 'абвгд'.decode('my-terminal-encoding')
Nei file è anche possibile specificare la codifica del file con una linea speciale modalità:
# -*- encoding: ISO-8859-5 -*-
us = u'абвгд'
Per altri modi per impostare la codifica di input predefinita è possibile consultare sys.setdefaultencoding(...)
o sys.stdin.encoding
.
Sì, questo ha molto senso per me, grazie. – disc0dancer
+1 risposta molto completa –