Заставьте Emacs использовать UTF-8 с Python Interactive Mode - PullRequest
7 голосов
/ 20 мая 2009

Когда я запускаю Python из Mac OS 'Terminal.app, python распознает кодировку как UTF-8:

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


Редактировать: Поскольку у меня нет представителя для редактирования принятого ответа, именно это и работает для меня на Aquaemacs 1.6, Mac OS 10.5.6.

В python-mode-hook я добавил строку

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

Очевидно, Mac OS требует "UTF-8", в то время как dfa говорит, что Ubuntu требует "UTF8".

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

Спасибо dfa и Jouni за помощь в поиске ответа.

Вот мой последний 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

1 Ответ

7 голосов
/ 20 мая 2009

проверьте переменные среды:

$ 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

в вашем python hook, попробуйте:

(setenv "LANG" "en_US.UTF8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...