3

In emacs (use run-python command to call python3):

>>> sys.version
sys.version
'3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>> sys.getdefaultencoding()
sys.getdefaultencoding()
'utf-8'
>>> data
data
'sp\xe4m'
>>> print(data)
print(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 2: ordinal not in range(128)

In terminal:

~$python3
Python 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> data='sp\xe4m'
>>> sys.getdefaultencoding()
'utf-8'
>>> data
'späm'
>>> print(data)
späm

Does anyone have ideas about the reason that unicode string of Python works in terminal but not in emacs

(Version information of emacs : GNU Emacs 24.2.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-08-27 on bob.porkrind.org)

4

4 に答える 4

5

I believe that this is related: https://emacs.stackexchange.com/a/9876/861

Adding

(setenv "LANG" "en_US.UTF-8")
(setenv "LC_ALL" "en_US.UTF-8")
(setenv "LC_CTYPE" "en_US.UTF-8")

to your .emacs solved the problem for me.

于 2015-04-18T14:42:14.043 に答える
2

の値は、sys.getdefaultencoding()実行しているstdoutまたはシェルとは関係ありません。デフォルトのエンコーディングは、Unicode文字列のエンコードに使用される内部エンコーディングです。

ただし、印刷先のシェルは必ずしも同じエンコーディングであるとは限りません。stdoutのエンコーディングは。から取得できますsys.stdout.encoding。残念ながら、Pythonにはそれを変更する手段がないため、シェルエンコーディングを変更する方法を自分で確認する必要があります(Windowsコンソールでは、chcpたとえばを使用して行われます)。

于 2013-01-05T14:56:27.270 に答える
1

This work in my machine (Windows 7, Emacs 25.1)

In init.el set this:

(setenv "PYTHONIOENCODING" "utf-8")

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

于 2017-02-07T13:31:47.947 に答える
0

Type the following statement and then python works

export PYTHONIOENCODING='utf-8'
于 2013-12-19T08:41:10.787 に答える