2

这是一个困扰我很久的问题。我使用 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”编解码器无法对位置 1-2 中的字符进行编码:序数不在范围内(128)

所以我必须这样做:

print s.encode('utf-8')

任何熟悉 bbedit 的人都可以为我阐明这里发生了什么吗?有没有办法告诉编辑器在存在 unicode 字符的情况下如何表现?

谢谢,乔恩

4

2 回答 2

2

如果 BBEdit 依赖外部文件和/或重定向来执行此操作,那么不,没有办法修复它。修复它需要戳一些内部 Python 结构,以便告诉它在编码输出时使用 UTF-8。

于 2011-05-12T17:01:38.827 回答
1

万一其他人遇到这种情况,这里有一个我一无所知的python传说的奇怪角落:

BBedit 的好人为我澄清了这一点。

看来,具体问题是由 bbedit 中的运行时条件引起的,他们没有追踪到,但是有这个解决方法:

Python 知道一个名为“sitecustomize.py”的特殊脚本

如果将以下文本放入 sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')

并将这个文件移动到

/路径/到/Python/安装/站点包/

然后当 bbedit 生成一个 python 进程时,python 'site' 模块会自动调用 sys.setdefaultencoding() ,然后在为会话设置默认编码之后(这是奇怪的位)从 sys 命名空间中删除 setdefaultencoding 。看:

http://docs.python.org/library/sys.html#sys.setdefaultencoding

于 2011-06-29T16:36:15.433 回答