Python 在 Windows 上表现 + 非 ascii 步骤
Python Behave + non-ascii steps on Windows
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上这个函数总是return单字节字符集(所谓的"charset for non-unicode programs")。拉丁文是 Windows-1252,西里尔文是 Windows-1251 等
所以,UTF-8 py 文件总是坏的。
我的问题是,如果不想使用 1 字节字符集,我该如何使用非 ascii 步骤定义和 Behave on Windows?
那里的错误是代码没有注意以 二进制模式 打开文件,这将绕过本地编码的任何问题。
似乎 python-behave devs have already fixed this issue,因此解决您的问题的一种方法是更新到最新的 git 版本。但是如果你不能那样做,用 exec_file
函数的当前 git 版本对 runner.py 模块进行猴子修补应该很容易。
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上这个函数总是return单字节字符集(所谓的"charset for non-unicode programs")。拉丁文是 Windows-1252,西里尔文是 Windows-1251 等
所以,UTF-8 py 文件总是坏的。
我的问题是,如果不想使用 1 字节字符集,我该如何使用非 ascii 步骤定义和 Behave on Windows?
那里的错误是代码没有注意以 二进制模式 打开文件,这将绕过本地编码的任何问题。
似乎 python-behave devs have already fixed this issue,因此解决您的问题的一种方法是更新到最新的 git 版本。但是如果你不能那样做,用 exec_file
函数的当前 git 版本对 runner.py 模块进行猴子修补应该很容易。