3

在 emacs 中(使用run-python命令调用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)

在终端:

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

有没有人知道 Python 的 unicode 字符串在终端中有效但在 emacs 中无效的原因

(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

我相信这是相关的:https ://emacs.stackexchange.com/a/9876/861

添加

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

.emacs为我解决了这个问题。

于 2015-04-18T14:42:14.043 回答
2

的价值sys.getdefaultencoding()与您正在执行的标准输出或外壳无关。默认编码只是用于编码 Unicode 字符串的内部编码。

但是,您要打印到的外壳不一定具有相同的编码。您可以从中获取标准输出的编码sys.stdout.encoding。不幸的是,Python 没有办法改变它,所以你必须自己弄清楚如何改变 shell 编码(在 Windows 控制台中,它是使用chcpexample 完成的)。

于 2013-01-05T14:56:27.270 回答
1

这在我的机器上工作(Windows 7,Emacs 25.1)

在 init.el 中设置:

(setenv "PYTHONIOENCODING" "utf-8")

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

于 2017-02-07T13:31:47.947 回答
0

键入以下语句,然后 python 工作

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