首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么UnicodeEncodeError只在emacs的python shell中引发?

为什么UnicodeEncodeError只在emacs的python shell中引发?
EN

Stack Overflow用户
提问于 2013-01-05 22:12:05
回答 4查看 729关注 0票数 3

python3中(使用run-python命令调用emacs ):

代码语言:javascript
复制
>>> 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)

在终端中:

代码语言:javascript
复制
~$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)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-05 22:56:27

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-04-18 22:42:14

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

添加

代码语言:javascript
复制
(setenv "LANG" "en_US.UTF-8")
(setenv "LC_ALL" "en_US.UTF-8")
(setenv "LC_CTYPE" "en_US.UTF-8")

你的.emacs帮我解决了这个问题。

票数 5
EN

Stack Overflow用户

发布于 2017-02-07 21:31:48

这在我的机器(Windows7,Emacs 25.1)中工作。

在init.el中设置以下内容:

代码语言:javascript
复制
(setenv "PYTHONIOENCODING" "utf-8")

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14172576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档