2009-05-20 12 views
7

Cuando comienzo Python desde Mac OS' Terminal.app, pitón reconoce la codificación como UTF-8:Hacer Emacs usar UTF-8 con Python modo interactivo

$ python3.0 
Python 3.0.1 (r301:69556, May 18 2009, 16:44:01) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'UTF-8' 

Esto funciona igual para python2.5.

Pero dentro de Emacs, la codificación es US-ASCII.

Python 3.0.1 (r301:69556, May 18 2009, 16:44:01) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'US-ASCII' 

¿Cómo hago Emacs comunicarse con Python para que sys.stdout sabe usar UTF-8?


Editar: Dado que no tengo el representante de editar la respuesta aceptada, esto es precisamente lo que funcionó para mí en Aquaemacs 1.6, Mac OS 10.5.6.

En la pitón-mode-hook, he añadido la línea

(setenv "LANG" "en_GB.UTF-8") 

Al parecer, Mac OS requiere "UTF-8", mientras que DFA dice que Ubuntu requiere "UTF-8".

Además, tuve que establecer la codificación de entrada/salida haciendo C-x RET p y luego escribiendo "utf-8" dos veces. Probablemente debería averiguar cómo configurar esto permanentemente.

Gracias a dfa y Jouni por ayudarme colectivamente a encontrar la respuesta.

Aquí es mi último python-mode-hook:

(add-hook 'python-mode-hook 
    (lambda() 
     (set (make-variable-buffer-local 'beginning-of-defun-function) 
      'py-beginning-of-def-or-class) 
     (define-key py-mode-map "\C-c\C-z" 'py-shell) 
     (setq outline-regexp "def\\|class ") 
     (setenv "LANG" "en_GB.UTF-8"))) ; <-- *this* line is new 
+0

nota: en ubuntu LANG debe configurarse en en_GB.UTF8, sin - – dfa

+0

Gracias, corregí mi resumen. –

+0

sin guion en ubuntu? Siempre uso el formulario UTF-8 y funciona. – u0b34a0f6ae

Respuesta

7

un chequeo de las variables de entorno:

$ LANG="en_US.UTF8" python -c "import sys; print sys.stdout.encoding" 
UTF-8 
$ LANG="en_US" python -c "import sys; print sys.stdout.encoding" 
ANSI_X3.4-1968 

en su gancho pitón, probar:

(setenv "LANG" "en_US.UTF8") 
+0

Eso es python-mode-hook, ¿verdad? Establecer LANG no cambió nada. Es cierto que mis variables de entorno no están siendo recogidas por (Aqua) emacs. –

+0

dunno, con emacs 22.2 en ubuntu funciona – dfa

+0

Creo que tiene que ser "en_US.UTF-8" en OS X - tenga en cuenta el guión. Para hacer que Emacs recoja sus variables de entorno, puede configurarlas globalmente en ~/.MacOSX/environment.plist usando el Editor de listas de propiedades. –