Recibo un UnicodeEncodeError: 'ascii' codec can't encode excepción cuando intento imprimir una cadena Unicode en Linux. En Windows no me sale el error.
El código ejecutado en Linux:
my_str = u'\u4ece\u5165\u5e93' print "%r" % my_str #output: u'\u4ece\u5165\u5e93' print "%s" % my_str #output: UnicodeEncodeError: 'ascii' codec can't encode character u'\u4ece' in position 0: ordinal not in range(128)En Windows obtengo:
my_str = u'\u4ece\u5165\u5e93' print "%r" % my_str #output: u'\u4ece\u5165\u5e93' print "%s" % my_str #output: 从入库Es muy probable que su locale y/o entorno esté roto, no instalado, no configurado o configurado en C . Python usa la configuración regional para aplicar el codificador correcto en la salida estándar. Esto permite que los Unicodes se codifiquen con la codificación adecuada.
Si está ejecutando Python desde la línea de comandos, asegúrese de que su configuración regional esté en buen estado. Escriba locale y debería ver algo como:
$ locale LANG=en_GB.UTF-8 LANGUAGE= LC_CTYPE="en_GB.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_PAPER="en_GB.UTF-8" LC_NAME="en_GB.UTF-8" LC_ADDRESS="en_GB.UTF-8" LC_TELEPHONE="en_GB.UTF-8" LC_MEASUREMENT="en_GB.UTF-8" LC_IDENTIFICATION="en_GB.UTF-8" LC_ALL= $Si ve mensajes de error o si LANG=C o similar, Python usará un codificador ASCII, que rechaza los caracteres que no son ASCII.
Para encontrar las configuraciones regionales instaladas en su sistema, escriba locale -a . Seleccione la configuración regional adecuada, idealmente una que termine en "UTF-8", y establezca LANG en consecuencia. P.ej
LANG=en_GB.UTF-8 Vuelva a ejecutar la locale y compruebe si hay errores. Si aún recibe errores, deberá investigar cómo reconstruir sus locales para su distribución.
Si está ejecutando dentro de un IDE o no puede arreglarlo, entonces puede tener éxito agregando la siguiente variable de entorno a su shell o configuración de ejecución de IDE:
export PYTHONIOENCODING=utf-8Esto le dice a Python que ignore la configuración regional y aplique un codificador UTF-8 a la salida estándar.
Puede validar lo que Python está usando para la configuración regional utilizando el módulo de locale en Python. Vuelve mi local saludable:
>>> import locale >>> locale.getdefaultlocale() ('en_GB', 'UTF-8') >>> locale.getpreferredencoding() 'UTF-8' Una configuración regional en mal estado devolverá US-ASCII para locale.getpreferredencoding()
puedes probar:
print u"{0}".format(str)o
print u"{0}".format(l.decode('utf-8'))