读取Python中的点文件
我正在尝试读取包含以下内容的点文件:读取Python中的点文件,python,dot,Python,Dot,我正在尝试读取包含以下内容的点文件: graph { KZJLCHYE -- DJTGWUZZ; PNLWKOXF -- BFSIOMPY; ... } 但当我尝试读取该点文件时,我得到“UnicodeDecodeError:'utf-8'编解码器无法解码位置0处的字节0xd0:无效的继续字节”。有没有一种方法可以仅使用标准库读取Python中点文件的内容 要忽略文件中的unicode字符,可以执行以下操作 var = unicode(var, errors='igno
graph {
KZJLCHYE -- DJTGWUZZ;
PNLWKOXF -- BFSIOMPY;
...
}
但当我尝试读取该点文件时,我得到“UnicodeDecodeError:'utf-8'编解码器无法解码位置0处的字节0xd0:无效的继续字节”。有没有一种方法可以仅使用标准库读取Python中点文件的内容 要忽略文件中的unicode字符,可以执行以下操作
var = unicode(var, errors='ignore')
文本文件的编码是一个永远无法完全解决的模糊问题。您需要猜测编码,或者手头上有一个损坏的(或二进制)文件:
open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
--只需设置errors='ignore'
Python3比python2更好地处理编码,所以如果您提到您使用的是哪个版本,它会有所帮助str
时处理错误字符:open(文件'rb')
。同样,您的解码选项取决于python版本,因此我无法进一步阐述我认为@sikez在基于文本的图形格式中是“点”的意思,而不是在用户主目录中前缀为
的文件中是“点”的意思。您能将文件的前几个(原始)字节添加到您的问题中吗?类似于hextump-C-n16 yourfile.dot
@JeremyKerr这里是原始字节:00000000d0 cf 11 e0 a1 b1 1a e10000我正在使用Python3。我忽略了错误,但没有读取文件中的任何内容。我假设这是因为整个文件会引发错误。我还尝试读取二进制流并将其转换回字符串,但我得到了难以辨认的输出()。@sikez可能是您试图读取错误的编码。例如:如果它试图读取一个3字节的UTF-8字符,但实际上文本是用4字节的UTF-32字符编码的,那么你肯定会把每个字符的偏移量都弄错。请参阅我的步骤1:在一个好的编辑器中打开它(我使用emacs),它将猜测编码名称。您还可以使用python库chardet
猜测编码。也可以尝试一些主流的方法:open(file,encoding='latin-1')
,open(file,encoding='utf-16')
,open(file,encoding='utf-32')
…非常感谢!我使用了chardet,发现编码实际上是ISO-8859-2。你可能会有一个可怕的混合文本与一些二进制数据生成的“我们不需要任何标准”软件。由于ISO-8859-2是一个1字节编解码器,其故障表明文本编码在一个多字节Unicode中,因此无法进行自动解码,因为混入的二进制数据总是会破坏字符边界检测。最好的办法是以二进制读取,并尝试在解码之前手动隔离二进制部分。另外,如果任何文本编辑器都能正确读取您的文件,那么我上面的推理是无效的:自动解码是可能的,而您犯了一个错误。