这是一个困扰我很长时间的问题。我使用bbedit来编辑python代码。据我所知,从编辑器中运行代码会产生自己的python进程,运行代码,并将输出写入日志文件。所以bbedit不知道环境变量之类的东西。如果我在终端的命令行中尝试这样做:
>>> s = 'háček'
>>> print s
háčekfind and good。但如果我在bbedit中有以下文件:
#!/opt/local/bin/python
# -*- coding: utf-8 -*- #
s = u'háček'
print s并尝试从我得到的编辑器中运行它:
UnicodeEncodeError: ascii编解码器无法对位置1-2中的字符进行编码:序数不在范围内(128)
所以我必须这样做:
print s.encode('utf-8')熟悉bbedit的人能给我解释一下这里发生了什么吗?有没有一种方法可以告诉编辑器在出现unicode字符时应该如何操作?
谢谢,乔恩
发布于 2011-06-30 00:36:15
在其他人不太可能遇到这种情况的情况下,这里有一个我一无所知的奇怪的python知识角落:
BBedit的好心人为我澄清了这一点。
具体的问题,看起来是由bbedit中的一个运行时条件引起的,他们还没有追踪到,但是有一个解决方法:
Python知道一个名为"sitecustomize.py“的特殊脚本
如果将以下文本放入sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')并将此文件移动到
/Path/To/Python/Installation/site-packages/
然后,当bbedit产生一个python进程时,python 'site‘模块会自动调用sys.setdefaultencoding(),然后在为会话设置了默认编码(这是个奇怪的地方)之后,从sys名称空间中删除setdefaultencoding。请参见:
http://docs.python.org/library/sys.html#sys.setdefaultencoding
发布于 2011-05-13 01:01:39
如果BBEdit依赖于外部文件和/或重定向来实现这一点,那么就没有办法修复它。修复它需要插入一些内部Python结构,以便告诉它在编码输出时使用UTF-8。
https://stackoverflow.com/questions/5981570
复制相似问题