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 に精通している人は、ここで何が起こっているのかを教えてくれますか? ユニコード文字が存在する場合の振る舞いをエディターに伝える方法はありますか?

ありがとう、ジョン

4

2 に答える 2

2

BBEdit がこれを行うために外部ファイルやリダイレクトに依存している場合、いいえ、修正する方法はありません。これを修正するには、出力をエンコードするときに UTF-8 を使用するように指示するために、いくつかの内部 Python 構造を突く必要があります。

于 2011-05-12T17:01:38.827 に答える
1

他の人がこれに遭遇した可能性は低いですが、ここに私が何も知らなかった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-06-29T16:36:15.433 に答える