在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
)
答案 0 :(得分:4)
我认为这是相关的: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
解决了我的问题。
答案 1 :(得分:2)
sys.getdefaultencoding()
的值与您正在执行的stdout或shell无关。默认编码只是用于编码Unicode字符串的内部编码。
您要打印的shell不一定具有相同的编码。您可以从sys.stdout.encoding
获取stdout的编码。不幸的是,Python没有办法改变它,所以你必须自己找出如何更改shell编码(例如在Windows控制台中,使用chcp
完成)。
答案 2 :(得分:1)
这项工作在我的机器上(Windows 7,Emacs 25.1)
在init.el中设置:
(setenv "PYTHONIOENCODING" "utf-8")
(setenv&#34; LANG&#34;&#34; en_US.UTF-8&#34;)
答案 3 :(得分:0)
键入以下语句,然后python工作
export PYTHONIOENCODING='utf-8'