python 2 shebang中的非ASCII字符

时间:2018-05-14 13:37:56

标签: python python-2.7 non-ascii-characters

正如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脚本。

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

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

1 个答案:

答案 0 :(得分:0)

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

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