2012-04-09 12 views
5

Estoy tratando de escribir algunos caracteres en español en cadenas en modo interactivo. Por ejemplo, option+e e para producir 'é' para que haga una declaración como string="él". Esto funciona en la terminal, pero en python (cualquier versión que tengo instalada, de la que tengo varias) no funciona. Simplemente no produce nada. Esto incluye tratar de pegar los personajes. Es exactamente el problema descrito en this question, específicamente la parte sobre pegar y en su comentario a la pregunta de Alex, donde señala que la respuesta de Alex no aborda la cuestión de la falla de copiar/pegar con respecto a los caracteres utf-8. ¿Cómo puedo hacer esto?Escribir caracteres utf-8 en python en modo interactivo en OS-X

+0

¿Qué es exactamente lo que quiere decir con "el intérprete de Python"? Accedo al shell de Python * a través de * la terminal, ¿cómo lo haces? –

+0

Creo que quise decir el modo interactivo. Cambió la pregunta. –

+0

Eso no responde mi pregunta. ¿Cómo llegas a esto que llamas "modo interactivo"? –

Respuesta

0

usa u antes de la cadena literal, para hacerla una cadena unicode.

string = u"El avión cayó del cielo" 

si eso no funciona el problema radica en su editor o terminal, en ese caso, trate de añadir

#coding: utf8 

en cualquiera de las 2 primeras líneas de su programa de pitón y utilizar un editor adecuado con Unicode apoyo.

+0

La primera sugerencia no funciona, no puedo ingresar el carácter en absoluto en el intérprete.No estoy seguro de lo que quieres decir en la segunda sugerencia. Estoy usando la aplicación de terminal que viene con OS-X y puedo ingresar los caracteres en el shell, pero no en python en modo interactivo. Ya he cambiado mi codificación predeterminada para que sea 'utf-8' en 'sitecustomize.py'. –

+1

No se recomienda cambiar el ancho del sistema de codificación predeterminado, ya que puede dañar algunas bibliotecas. – KurzedMetal

+0

** No ** cambie la codificación predeterminada. ¿Qué significa 'import sys; print (sys.stdout.encoding) 'decir? –

3

La biblioteca readline que Python usa para leer entradas interactivas no acepta caracteres no ASCII enviados por el terminal. Esto significa que su emulador de terminal no proporciona los caracteres en la codificación UTF-8, o readline no está configurado para aceptar la entrada UTF-8.

Afortunadamente, readline es utilizado por muchos programas populares, incluido el shell bash, por lo que hay mucha información sobre cómo hacerlo funcionar. Por ejemplo, from this article:

¿Cómo llego UTF-8 de entrada para que funcione correctamente?

  • En el Inspector de Terminal :
    • En la sección de emulación, desactivar la opción caracteres de escape no ASCII.
    • En la sección Pantalla, elija Unicode (UTF-8) como la codificación de conjunto de caracteres.
  • Añada la siguiente línea a su .profile:

    export LC_CTYPE=en_US.UTF-8 
    
  • Añadir las siguientes líneas a su .inputrc:

    set meta-flag on 
    set input-meta on 
    set output-meta on 
    set convert-meta off 
    
  • aplicar los cambios haciendo una source ~/.profile y una source ~/.inputrc.

+0

Esto también lamentablemente no resuelve ese problema – Rmatt

Cuestiones relacionadas