>>> print 'абвгд'
абвгд
Cuando escribe algunos caracteres, su terminal decide cómo se representan estos caracteres a la aplicación. Su terminal podría dar los caracteres a la aplicación codificada como utf-8, ISO-8859-5 o incluso algo que solo su terminal entiende. Python obtiene estos caracteres como una secuencia de bytes. Luego, Python imprime estos bytes tal como están, y su terminal los interpreta de alguna manera para mostrar los caracteres. Desde su terminal por lo general interpreta los bytes de la misma manera, ya que les codificada antes, todo lo que se muestra como las ha escrito en.
>>> u'абвгд'
Aquí se escribe en algunos personajes que llegan al intérprete de Python como una secuencia de bytes, tal vez codificado de alguna manera por la terminal. Con el prefijo u
, python intenta convertir estos datos a unicode. Para hacer esto correctamente, python debe saber qué codificación usa su terminal. En su caso, parece que Python adivina que la codificación de sus terminales sería ASCII, pero los datos recibidos no coinciden, por lo que obtiene un error de codificación.
La forma recta hacia adelante para crear cadenas Unicode en una sesión interactiva por lo tanto sería algo como esto esto:
>>> us = 'абвгд'.decode('my-terminal-encoding')
En los archivos también puede especificar la codificación del archivo con una línea de modo especial:
# -*- encoding: ISO-8859-5 -*-
us = u'абвгд'
Para conocer otras formas de configurar la codificación de entrada predeterminada, puede consultar sys.setdefaultencoding(...)
o sys.stdin.encoding
.
Sí, esto tiene mucho sentido para mí, gracias. – disc0dancer
+1 respuesta muy completa –