UnicodeDecodeError 使用 for 循环解析文件 python3

UnicodeDecodeError parsing file with for loop python3

当我在文件中循环行时出现 UnicodeDecodeError。

with open(somefile,'r') as f:
    for line in f:
        #do something

这发生在我使用 python 3.4 时。 一般来说,我有一些文件不包含 UTF-8 字符。我想逐行解析文件并找到问题所在的行,并在出现此类非 utf-8 的行中获得确切的索引。我已经为它准备好了代码,但它在 python 2.7.9 下工作,但在 python 3.4 下,当执行 for 循环时我得到了 UnicodeDecodeError。 有任何想法吗???

您需要以二进制模式打开文件并一次解码一行。试试这个:

with open('badutf.txt', 'rb') as f:
    for i, line in enumerate(f,1):
        try:
            line.decode('utf-8')
        except UnicodeDecodeError as e:
            print ('Line: {}, Offset: {}, {}'.format(i, e.start, e.reason))

这是我在 Python3 中得到的结果:

Line: 16, Offset: 6, invalid start byte

果然第16行第6位是坏字节