2009-05-20 3 views
7

Когда я начинаю Python от Mac OS»Terminal.app, питон распознает кодировку как UTF-8:сделать Emacs использовать UTF-8 с Python в интерактивном режиме

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

Это работает то же самое для python2.5.

Но внутри Emacs кодировка 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' 

Как сделать Emacs общаться с Python, так что sys.stdout знает использовать UTF-8?


Edit: Так как у меня нет респ редактировать принятый ответ, вот именно то, что работает для меня на Aquaemacs 1.6, Mac OS 10.5.6.

В питоне-режиме крюка, я добавил строку

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

Видимо, Mac OS требует "UTF8", в то время как DFA говорит, что Ubuntu требует "UTF8".

Кроме того, мне пришлось установить кодировку ввода/вывода, выполнив C-x RET p, а затем дважды набрав «utf-8». Вероятно, я должен узнать, как установить это навсегда.

Спасибо dfa и Jouni за то, что помогли мне найти ответ.

Вот мой последний питон-режим-крюк:

(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

примечание: на убунту LANG должен быть установлен в en_GB.UTF8, без - – dfa

+0

Спасибо, я исправил свое резюме. –

+0

без черточки на ubuntu? Я всегда использую форму UTF-8, и она работает. – u0b34a0f6ae

ответ

7

проверить переменные окружения:

$ 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 

в вашем питона крюком, попробуйте:

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

Это python-mode-hook, правильно? Настройка LANG ничего не изменила. Правда, мои переменные окружения не подхватываются (Aqua) emacs. –

+0

dunno, с emacs 22.2 на ubuntu это работает – dfa

+0

Я думаю, что это должно быть «en_US.UTF-8» на OS X - обратите внимание на дефис. Чтобы Emacs забирала ваши переменные среды, вы можете установить их глобально в ~/.MacOSX/environment.plist, используя Редактор списка свойств. –