从命令行指定 Python 源文件编码

9

PEP0263规定了在Python源文件内部声明编码的语法。

是否可以从命令行指定编码?

或者这样做有何不良影响?

例如:

$ python --encoding utf-8 myscript.py

甚至更多:
$ PYTHONSOURCEENCODING=utf-8 python myscript.py

那么它应该覆盖源文件中指定的编码,如果有指定的话? - aldeb
你可以在这方面采取两种方式。一种是可能想要覆盖源文件中错误指定的编码。另一种是可能想要说“使用命令行中指定的编码,除非在源文件中指定了编码”。 - user3414663
2个回答

3
这只是一个hack,不是你想要的东西,并且在没有sed的系统上无法使用。但你可以通过使用sed'1s/^/# -*- coding: utf-8 -*-\n/' script.py | python将编码行前置到任何python脚本中。
为了更加通用,你可以在.bashrc或profile中定义一个函数。
另外,我认为这个功能一开始没有被实现的原因是编码应该被视为文件本身的属性,而不是生成线程的调用。至少在我的思维中,文件编码和进程生成存在的概念空间相当不同。

1
尽管有特殊情况可以使用此功能,但我认为它可能会令人困惑。 当您执行Python脚本时,可能存在两种不同的编码方式: 源脚本编码,可以通过PEP0263在脚本本身中定义; 环境编码可以通过环境变量定义。 前者是静态的,仅用于允许程序员在字面字符串中使用非ASCII字符。 后者应该用于IO。它可能会在脚本的不同运行中更改。 如果您想在命令行(或通过环境变量)传递脚本编码,则会与本地运行时系统编码混淆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接