gpt4 book ai didi

python - python 2 shebang 中的非 ASCII 字符

转载 作者:行者123 更新时间:2023-11-28 19:03:14 26 4
gpt4 key购买 nike

作为PEP 263说,Python 2(在我的例子中特别是 2.7)需要一个神奇的注释行来指定文件编码:

# -*- coding: utf-8 -*-

没有它,就不可能在文件中包含非 ASCII 字符。将引发臭名昭著的错误:

SyntaxError: Non-ASCII character '[…]' in file […] on line […], but no encoding declared; see http://python.org/dev/peps/pep-0263/

但是,如果非 ASCII 字符位于 shebang 解释器路径中,则魔术注释不起作用:

#!/Users/naïve/project/python2.7
# -*- coding: utf-8 -*-
print 'Hello.'

例如,如果您在具有非 ASCII 路径的文件夹中创建 virtualenv,就会发生这种情况:创建了许多带有破坏脚本的 shebang 的脚本。

我能想出的唯一解决方法是将文件夹符号链接(symbolic link)到某个仅 ASCII 的路径中。然后可以将 shebang 路径更改为 ASCII 路径。或者在 virtualenv 的情况下从符号链接(symbolic link)路径初始化它。

但是,如果路径的非 ASCII 部分是用户的主路径并且用户没有管理权限,则无法执行此操作。所以我想问:对于这种情况还有其他解决方法吗?希望更干净?例如。如果 Python 没有找到魔术注释,它会使用一些默认的文件编码设置或环境变量?

最佳答案

如果将文件保存为 utf-8-sig 而不是 utf-8,则根本不需要编码 cookie。也就是说,使用 unicode byte-order mark保存文件时。

在 python 中,您可以使用 utf-8-sig 作为编码参数。在 VIM 中,您可以使用 :set bomb 显式保存带有 BOM 的文件。

关于python - python 2 shebang 中的非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com