2011-05-12 104 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