如何为 python 解释器全局设置文件名编码?
How to set the filename encoding globally for a python interpreter?
在一个项目中,我们需要在源代码中到处打开很多文件。我们知道磁盘上的所有文件名都是以 utf-8 编码的,并且所有文件名在内部都以 Unicode 进行。
有没有办法为 运行 解释器全局设置文件名编码,以便我们更改以下命令:
open(filename.encode('utf-8'))
到这个更简单的版本:
open(filename)
这将减少开发人员之间的错误和混淆。我们使用python 2.7.
假设这确实是您的意思(而不是文件 内容 的编码),这样做就可以了:
open = lambda fname, *a, **kw: __builtins__.open(fname.encode('utf-8'), *a, **kw)
这只会影响包含(或导入)重新定义的模块,因此相当安全。但是,在您的环境中提供不同的命令来打开适用于此的文件的长期 运行 可能不会那么令人困惑,而且肯定不会那么容易出问题:
def fsopen(fname, *args, **kwargs):
"""(explain when and why you want this)"""
return open(fname.encode('utf-8'), *args, **kwargs)
没有这样的选项,因为 open
函数记录了 不 对字符串进行 UTF-8 编码的行为。
原因很简单:open
或多或少只是底层 OS 函数的委托,并且必须作用于 OS 函数可以作用的任何字符串和。因此,它需要原始 Python 字符串而不是 unicode。
如果你需要这个,实现一个包装函数来做到这一点。
在 Python 中,您可以只覆盖局部名称——或全局名称,就此而言:
__uni_open = lambda string: __builtins__.open(string.encode("utf-8"))
open = __uni_open
您的所有应用程序在任何模块中工作。
我不建议这样做 -- 它可能会破坏项目无法控制的内容。
在一个项目中,我们需要在源代码中到处打开很多文件。我们知道磁盘上的所有文件名都是以 utf-8 编码的,并且所有文件名在内部都以 Unicode 进行。
有没有办法为 运行 解释器全局设置文件名编码,以便我们更改以下命令:
open(filename.encode('utf-8'))
到这个更简单的版本:
open(filename)
这将减少开发人员之间的错误和混淆。我们使用python 2.7.
假设这确实是您的意思(而不是文件 内容 的编码),这样做就可以了:
open = lambda fname, *a, **kw: __builtins__.open(fname.encode('utf-8'), *a, **kw)
这只会影响包含(或导入)重新定义的模块,因此相当安全。但是,在您的环境中提供不同的命令来打开适用于此的文件的长期 运行 可能不会那么令人困惑,而且肯定不会那么容易出问题:
def fsopen(fname, *args, **kwargs):
"""(explain when and why you want this)"""
return open(fname.encode('utf-8'), *args, **kwargs)
没有这样的选项,因为 open
函数记录了 不 对字符串进行 UTF-8 编码的行为。
原因很简单:open
或多或少只是底层 OS 函数的委托,并且必须作用于 OS 函数可以作用的任何字符串和。因此,它需要原始 Python 字符串而不是 unicode。
如果你需要这个,实现一个包装函数来做到这一点。 在 Python 中,您可以只覆盖局部名称——或全局名称,就此而言:
__uni_open = lambda string: __builtins__.open(string.encode("utf-8"))
open = __uni_open
您的所有应用程序在任何模块中工作。
我不建议这样做 -- 它可能会破坏项目无法控制的内容。