python - python 2 shebang中的非ASCII字符
问题描述
正如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.'
例如,如果您virtualenv
在具有非 ASCII 路径的文件夹中创建 a,就会发生这种情况:创建了许多带有破坏脚本的 shebang 的脚本。
我能想出的唯一解决方法是将文件夹符号链接到一些仅限 ASCII 的路径。然后可以将 shebang 路径更改为 ASCII 路径。或者在virtualenv
从符号链接路径初始化它的情况下。
但是,如果路径的非 ASCII 部分是用户的主路径并且用户没有管理访问权限,则无法执行此操作。所以我想问一下:对于这种情况还有其他解决方法,希望更干净吗?例如,如果 Python 没有找到魔术注释,它会使用一些默认的文件编码设置或环境变量?
解决方案
如果将文件保存为utf-8-sig
而不是utf-8
,则根本不需要 encoding-cookie。也就是说,在保存文件时使用unicode 字节顺序标记。
在 python 中,您可以utf-8-sig
用作编码参数。在 VIM 中,您可以使用:set bomb
BOM 显式保存文件。
推荐阅读
- python - 通过cmd打开python文件不起作用
- azure-ad-b2c - 在 Azure AD B2C 中添加 instagram 作为身份提供者
- html - 来自地图数组的无线电输入
- python - 使用 Windows+puTTY 时如何在 AWS EC2 + Ubuntu 中运行 Python 和 Jupyter?
- c# - 从 Autorest 生成的代码中深度克隆对象
- scala - 我不断收到错误:值 toDF 不是 org.apache.spark.rdd.RDD 的成员
- c# - 无法隐式转换类型'System.Collections.Generic.IEnumerable
'到'int [] []' - julia - 在 Julia 中预分配数据和传递数据的设计模式
- tree - 删除树中的一个节点,使得森林中剩余的树都不包含超过一半的节点
- reactjs - React Props 没有带有浏览器转发按钮的最新 Redux 存储数据