2011-05-12 108 views
2

这是一个让我困惑很久的问题。我使用bbedit来编辑python代码。据我了解,从编辑器中运行代码,会产生自己的python进程,运行代码并将输出写入日志文件。所以bbedit不知道环境变量等。如果我在终端的命令行试试这个:编码错误从bbedit运行python

>>> 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字符的情况下行事?

感谢, 乔恩

回答

1

万一别人遇到了这一点,这里的蟒蛇绝杀的偏僻角落里,我什么都不知道的:

在BBEdit中的好乡亲澄清这对我来说。

的具体问题,它的出现,是在BBEdit中运行时的条件,他们没有追查造成的,但这种变通:

Python知道关于命名一个特殊的脚本“sitecustomize.py “

如果你把下面的文字中sitecustomize.py

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

这个文件移入

/路径/要/ Python的/安装/秒ite-packages/

然后,当bbedit衍生出一个python进程时,python'站点'模块会自动调用sys.setdefaultencoding(),然后在设置会话的默认编码(这是奇怪的位)之后,移除setdefaultencoding来自sys命名空间。参见:

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

+1

只是一个注释:'sys.setdefaultencoding'已经从Python 3中删除。我遇到了类似的问题,罪魁祸首竟然是地区。 'locale.getpreferredencoding()'返回US-ASCII,导致一些头疼的文件IO。在我的〜/ .bash_profile中显式设置LANG修复了它。 – robjwells 2013-09-13 16:37:26

2

如果BBEdit的依赖于外部文件和/或重定向这样做,则没有,有没有办法解决它。解决这个问题需要戳一些内部的Python结构,以便在编码输出时告诉它使用UTF-8。

+0

Thanks Ignacio,你说得很对。它确实需要一些内部Python结构。幸运的是,python本身似乎提供了一个机制来做到这一点。我提供了我自己的回答,概述了相当奇怪的哈克解决方案。 – jjon 2011-06-29 16:30:16