gpt4 book ai didi

Python open ("x", "r") 函数,我怎么知道或控制文件应该有哪种编码?

转载 作者:太空狗 更新时间:2023-10-30 01:24:08 25 4
gpt4 key购买 nike

如果 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 上得到的答案是:

it is the same encoding than the one you use on command line when passing a file argument

我认为这意味着它与我在执行 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 等工具猜测编码.

更新:

我想我现在明白你的问题了。我以为您有一个需要为其编写代码的文件,但看起来您有需要为其编写文件的代码 ;-)

有问题的代码可能只正确处理纯 ASCII(字符串可能稍后被转换,但我认为不太可能)。因此,您需要制作一个仅包含 ASCII(代码点 < 128)字符的文本文件,并确保它以 ASCII 编码(即不是 UTF-16 或类似的编码)保存。考虑到 Mercurial 处理可以包含 Unicode 字符的文件名,这有点不幸。

关于Python open ("x", "r") 函数,我怎么知道或控制文件应该有哪种编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com