如果 python 脚本使用open("filename", "r")
函数打开并随后读取文本文件的内容,我如何知道该文件应该具有哪种编码?
请注意,由于我是从自己的程序执行此脚本,因此如果有任何方法可以通过环境变量来控制它,那么这对我来说就足够了。
顺便说一句,这是 Python 2.7。
有问题的代码来自 Mercurial,它可以提供一个文件列表,例如通过磁盘上的文件添加到存储库,而不是在命令行上传递它们。
所以基本上,而不是这个:
hg add A B C
我可以将 A、B 和 C 写入一个文件,每个文件之间有换行符,然后执行以下命令:
hg add listfile:input.txt
最终读取该文件的代码是这样的:
files = open(name, 'r').read().split(delimiter)
因此我的问题。当我询问应该使用哪种编码时,IRC 上给出的答案是:
它与传递文件参数时在命令行上使用的编码相同
我认为这意味着它与我执行 Mercurial (hg) 时“使用”的编码相同。由于我不知道那是哪种编码,所以我只是将所有内容都交给 .NET Process 对象,我在这里询问。
你不能。读取文件与其编码无关;您需要提前知道编码才能正确解释您读入的字节。
例如,如果您知道文件采用 UTF-8 编码:
with open('filename', 'rb') as f:
contents = f.read().decode('utf-8-sig') # -sig deals with BOM, if present
或者,如果您知道该文件仅为 ASCII:
with open('filename', 'r') as f:
contents = f.read() # results in a str object
如果你确实不知道文件的编码,那么显然不能保证你可以正确读取它;但是,您可以使用类似的工具猜测编码chardet http://chardet.feedparser.org/.
UPDATE:
我想我现在明白你的问题了。我以为您有一个需要为其编写代码的文件,但似乎您有一个需要为其编写文件的代码;-)
有问题的代码可能只能正确处理纯 ASCII(字符串可能稍后会被转换,但我认为不太可能)。因此,您需要创建一个仅包含 ASCII(代码点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)