【发布时间】:2017-10-17 01:54:56
【问题描述】:
我想在 python 中打开一个文本文件 (.dat),我收到以下错误: “utf-8”编解码器无法解码位置 4484 中的字节 0x92:无效的起始字节 但是文件是使用 utf-8 编码的,所以可能有一些字符无法读取。我想知道,有没有办法在不调用每个奇怪字符的情况下处理这个问题?因为我有一个相当大的文本文件,我需要几个小时才能找到未编码的 Utf-8 编码字符。
这是我的代码
import codecs
f = codecs.open('compounds.dat', encoding='utf-8')
for line in f:
if "InChI=1S/C11H8O3/c1-6-5-9(13)10-7(11(6)14)3-2-4-8(10)12/h2-5" in line:
print(line)
searchfile.close()
【问题讨论】:
-
是的,但我认为它只是文件中遇到的第一个非编码 UTF-8 字符,因此我假设一旦我更正了那个字符,我会遇到另一个和另一个,然后很快。正如我在问题中指定的那样,我要阅读的文本文件相当大
-
旁注:如果您使用 Python 2.6 或更高版本,带有标准(字节->文本)编解码器,请不要使用
codecs.open,使用io.open,这样更快,并且比codecs.open少错误。io.open实际上与 Python 3 上的内置open相同,但在 Python 2 上可用以简化编写 Unicode 友好代码并简化到 Py3 的移植。 -
在我看来“utf-8 非编码字符”是oxymoron。要成为 utf-8,它的内容需要以这种方式编码。也许是
'latin1'。 -
使用 UTF-8 编码的文件不能包含无效字节,除非它被损坏,或者编码器有问题。我想这些事情中的任何一个都是可能的,但更有可能的是该文件实际上并未编码为 UTF-8,而是其他的东西,例如 cp1252。是什么让您确定它是 UTF-8?
-
FWIW,在cp1252中
0x92是撇号’的编码