2009-05-20 9 views
7

Quand je commence Python à partir Terminal.app « Mac OS, python reconnaît l'encodage UTF-8:Faire Emacs utiliser UTF-8 avec Python en mode interactif

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

Cela fonctionne même pour python2.5.

Mais à l'intérieur d'Emacs, l'encodage est 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' 

Comment puis-je faire Emacs communiquer avec Python afin que sys.stdout sait utiliser UTF-8?


Edit: Comme je n'ai pas le représentant de modifier la réponse acceptée, voici précisément ce qui a fonctionné pour moi sur Aquaemacs 1.6, Mac OS 10.5.6.

Dans le mode raccroché python, j'ai ajouté la ligne

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

Apparemment, Mac OS nécessite "UTF8", tandis que DFA dit que Ubuntu exige "UTF8".

En outre, j'ai dû définir le codage d'entrée/sortie en faisant C-x RET p, puis en tapant "utf-8" deux fois. Je devrais probablement trouver comment régler cela de façon permanente.

Merci à dfa et Jouni pour m'avoir aidé à trouver la réponse.

Voici mon dernier 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

Note: sur ubuntu LANG doit être réglé sur en_GB.UTF8, sans - – dfa

+0

Merci, j'ai corrigé mon résumé. –

+0

sans tiret sur Ubuntu? J'utilise toujours le formulaire UTF-8 et ça marche. – u0b34a0f6ae

Répondre

7

vérifier vos variables d'environnement:

$ 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 

dans votre crochet de python, essayez:

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

C'est python-mode-hook, non? Le réglage de LANG n'a rien changé. Il est vrai que mes variables d'environnement ne sont pas captées par (Aqua) emacs, cependant. –

+0

dunno, avec emacs 22.2 sur ubuntu cela fonctionne – dfa

+0

Je pense qu'il doit être "en_US.UTF-8" sur OS X - notez le trait d'union. Pour qu'Emacs prenne en compte vos variables d'environnement, vous pouvez les définir globalement dans ~/.MacOSX/environment.plist en utilisant Property List Editor. –