es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema o error al usar la función print() con caracteres UTF-8 CJK en Python en Windows.

Tenía una fuente con codificación UTF-8:(name.py)

print("Por favor, ingresa tu nombre:")
input()

Y lo ejecuté en Windows 7:(Región: China, Idioma: Chino Simplificado)

C:\Users\User\Desktop>py -3 name.py
璇锋偍杈撳叆鎮ㄧ殑鍚嶅瓧:
foo
C:\Users\User\Desktop>chcp 65001
C:\Users\User\Desktop>py -3 name.py
??????????????????????????????:
foo

Y lo ejecuté en Windows 10:(Región: China, Idioma: Chino Simplificado)

C:\Users\User\Desktop>py -3 name.py
Traceback (most recent call last):
  File "name.py", line 1, in <module>
UnicodeEncodeError: 'utf-8' codec can't encode character '\u7487' in position 0: surrogates not allowed
C:\Users\User\Desktop>chcp 65001
C:\Users\User\Desktop>py -3 name.py
??????????????????????????????:
foo

Pero funciona correctamente en Linux:

$ python3 name.py
Por favor, ingresa tu nombre:
foo

¿Cómo solucionar este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la consola de Windows y su manejo de caracteres Unicode. Para solucionar este problema, puedes intentar las siguientes soluciones:

    1. Configura la página de códigos de la consola en UTF-8 (65001) antes de ejecutar el script. Esto se puede hacer con el comando chcp como se muestra en los ejemplos de Windows. Sin embargo, esto puede no funcionar para todas las aplicaciones de consola.
    2. Utiliza un emulador de consola de terceros para Windows que admita UTF-8, como ConEmu o Cmder.

    3. Cambia la codificación del archivo fuente a una codificación diferente que sea mejor soportada por la consola de Windows, como GBK o CP936. Puedes hacer esto abriendo el archivo en un editor de texto que admita diferentes codificaciones, y luego guardándolo con la codificación deseada.

    4. Utiliza un método de entrada diferente que sea mejor soportado por la consola de Windows, como la función input() con un argumento de indicación en lugar de la sentencia print.

    En general, es mejor evitar depender de caracteres Unicode en aplicaciones de consola en Windows, especialmente cuando se trabaja con idiomas que no sean el inglés. En su lugar, considera construir una interfaz gráfica de usuario o una aplicación web que pueda manejar caracteres Unicode de manera más sólida.

Comments are closed.