当我在文件中循环行时,我得到了UnicodeDecodeError。
with open(somefile,'r') as f:
for line in f:
#do something
当我使用python 3.4时会发生这种情况。 一般来说,我有一些文件包含一些没有UTF-8字符。我想逐行解析文件并找到问题apper的行,并在非utf-8出现的地方得到精确的索引。我已准备好它的代码,但它的工作原理是python 2.7.9但是在python 3.4下我执行for循环时得到了UnicodeDecodeError。 有任何想法吗???
答案 0 :(得分:1)
您需要以二进制模式打开文件并一次解码一行。试试这个:
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位是坏字节。