0

Python BDD フレームワークの Behave には、次のコードが含まれています。runner.py

with open(filename) as f:
    # -- FIX issue #80: exec(f.read(), globals, locals)
    # try:
    filename2 = os.path.relpath(filename, os.getcwd())
    code = compile(f.read(), filename2, 'exec')

ご覧のとおり、 には文字セットが提供されていませんopen。そのドキュメントによると、そのlocale.getpreferredencodingような場合に使用されます。

しかし、Windows では、この関数は常に1 バイトの文字セットを返します (いわゆる「非 Unicode プログラムの文字セット」)。ラテン語は Windows-1252、キリル文字は Windows-1251 などです。

そのため、UTF-8 py ファイルは常に壊れています。

私の質問は、1 バイト文字セットを避けたい場合、Windows の Behave で非 ASCII ステップ定義を使用するにはどうすればよいですか?

4

1 に答える 1

5

バグは、コードがファイルをバイナリ モードで開くことを考慮しないことです。これにより、ローカル エンコーディングの問題が回避されます。

そして、python-behave開発者はすでにこの問題を修正しているようです。そのため、問題の解決策の 1 つは、最新の git バージョンに更新することです。しかし、それができない場合は、exec_file関数の現在の git バージョンで runner.py モジュールにモンキー パッチを適用するのは簡単です。

于 2016-03-24T20:48:04.667 に答える