2009-05-20 17 views
7

Quando inizio Python da Mac OS' Terminal.app, pitone riconosce la codifica UTF-8:Fai Emacs usa UTF-8 con Python in modalità Interattiva

$ 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' 

Questo funziona lo stesso per python2.5.

Ma all'interno di Emacs, la codifica è 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' 

Come faccio Emacs comunicano con Python in modo che sys.stdout sa usare UTF-8?


Edit: Dato che non ho il rappresentante di modificare la risposta accettata, qui è esattamente ciò che ha funzionato per me su Aquaemacs 1.6, Mac OS 10.5.6.

In python-mode-hook, ho aggiunto la linea

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

A quanto pare, Mac OS richiede "UTF-8", mentre DFA dice che Ubuntu richiede "UTF-8".

Inoltre, ho dovuto impostare la codifica di input/output facendo C-x RET p e quindi digitando "utf-8" due volte. Probabilmente dovrei scoprire come impostarlo in modo permanente.

Grazie a dfa e Jouni per aiutarmi collettivamente a trovare la risposta.

Qui è la mia ultima 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: su Ubuntu LANG deve essere impostato su en_GB.UTF8, senza - – dfa

+0

Grazie, ho corretto il mio riassunto. –

+0

senza trattino su ubuntu? Io uso sempre il modulo UTF-8 e funziona. – u0b34a0f6ae

risposta

7

controllare le variabili d'ambiente:

$ 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 

nel vostro gancio pitone, provare:

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

Questo è hook in modalità python, giusto? L'impostazione di LANG non ha modificato nulla. E 'vero che le mie variabili di ambiente non vengono rilevate da (Aqua) emacs, però. –

+0

non so, con emacs 22.2 su ubuntu funziona – dfa

+0

Penso che debba essere "en_US.UTF-8" su OS X - nota il trattino. Per fare in modo che Emacs rilevi le variabili di ambiente, puoi impostarle globalmente in ~/.MacOSX/environment.plist utilizzando l'editor di elenchi di proprietà. –

Problemi correlati