在BBEdit中运行Python时的编码错误
这是一个让我困惑很久的问题。我用bbedit来编辑Python代码。我理解的是,从编辑器里运行代码时,它会启动一个自己的Python进程,执行代码,然后把输出写到一个日志文件里。所以bbedit并不知道环境变量之类的东西。如果我在终端的命令行里这样做:
>>> s = 'háček'
>>> print s
háček
结果很好。但是如果我在bbedit里有以下这个文件:
#!/opt/local/bin/python
# -*- coding: utf-8 -*- #
s = u'háček'
print s
然后尝试从编辑器里运行它,我就会得到:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
所以我不得不这样做:
print s.encode('utf-8')
有没有人能告诉我bbedit发生了什么?有没有办法让编辑器在遇到unicode字符时知道该怎么处理?
谢谢,
Jon
2 个回答
如果BBEdit依赖外部文件或者重定向来完成这个操作,那么就没办法修复了。要修复这个问题,需要对一些内部的Python结构进行调整,以便告诉它在输出时使用UTF-8编码。
如果其他人也遇到过这个问题,这里有个我之前不知道的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(),然后在为这个会话设置好默认编码后(这部分有点奇怪),会把setdefaultencoding从sys命名空间中移除。具体可以查看:
http://docs.python.org/library/sys.html#sys.setdefaultencoding