2009-05-20 8 views
7

Kiedy zacznę Python z Mac OS”Terminal.app, python uznaje, kodowanie jako UTF-8Bądź Emacs używać UTF-8 z Python Interactive trybie

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

To działa tak samo dla python2.5.

Ale wewnątrz Emacsa kodowanie to 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' 

Jak sprawić, aby Emacs komunikował się z Pythonem, aby sys.stdout wiedział, że używa UTF-8?


Edit: Ponieważ nie mam rep do edycji zaakceptowane odpowiedź, tutaj jest dokładnie to, co pracował dla mnie na Aquaemacs 1.6, Mac OS 10.5.6.

W python-mode-hook, dodałem linię

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

Najwyraźniej Mac OS wymaga "UTF8", natomiast dfa mówi, że Ubuntu wymaga "UTF8".

Dodatkowo, musiałem ustawić kodowanie wejścia/wyjścia, wykonując C-x RET p, a następnie dwukrotnie wpisując "utf-8". Prawdopodobnie powinienem się dowiedzieć, jak to ustawić na stałe.

Podziękowania dla DFA i Jouniego za pomoc w znalezieniu odpowiedzi.

Oto moja ostateczna 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

uwaga: na ubuntu LANG musi być ustawione na en_GB.UTF8, bez - – dfa

+0

Dzięki, poprawiłem moje podsumowanie. –

+0

bez kreski na ubuntu? Zawsze używam formularza UTF-8 i działa. – u0b34a0f6ae

Odpowiedz

7

sprawdzić zmienne środowiskowe:

$ 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 

w swoim hakiem Pythona, spróbuj:

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

To jest tryb python-mode-hook, prawda? Ustawienie LANG niczego nie zmieniło. To prawda, że ​​moje zmienne środowiskowe nie są pobierane przez emacs (Aqua). –

+0

dunno, z emacs 22.2 na ubuntu działa – dfa

+0

Myślę, że musi być "en_US.UTF-8" na OS X - zanotuj łącznik. Aby zmusić Emacsa do pobierania zmiennych środowiskowych, możesz ustawić je globalnie w ~/.MacOSX/environment.plist przy użyciu edytora listy właściwości. –