我有一个日志文件需要逐行处理,但是该文件包含一些“错误字节”(bad bytes)。我收到以下类似的错误消息:
UnicodeDecodeError: 'utf-8'编解码器无法解码位置9处的0xb0字节:起始字节无效
我已经将问题简化为一个名为“log.test”的文件,其中包含以下行:
(至少在我的Emacs中是这样显示的。)
我有一个名为“demo_error.py”的文件,内容如下:
我的猜测是我需要指定一个更通用的编解码器(例如“原始ASCII”)-但我不太确定如何做到这一点。
请注意,这在Python 2.7中并不是真正的问题。
为了使我的观点清晰:我并不介意针对该行获取异常-然后我可以简单地丢弃该行。问题是异常似乎发生在“for”循环本身上,这使得对该特定行的特殊处理变得不可能。
UnicodeDecodeError: 'utf-8'编解码器无法解码位置9处的0xb0字节:起始字节无效
我已经将问题简化为一个名为“log.test”的文件,其中包含以下行:
Message: \260
(至少在我的Emacs中是这样显示的。)
我有一个名为“demo_error.py”的文件,内容如下:
import sys
with open(sys.argv[1], 'r') as lf:
for i, l in enumerate(lf):
print(i, l.strip())
我随后在命令行中运行:
$ python3 demo_error.py log.test
完整的跟踪回溯如下:
Traceback (most recent call last):
File "demo_error.py", line 5, in <module>
for i, l in enumerate(lf):
File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/codecs.py", line 313, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 13: invalid start byte
我的猜测是我需要指定一个更通用的编解码器(例如“原始ASCII”)-但我不太确定如何做到这一点。
请注意,这在Python 2.7中并不是真正的问题。
为了使我的观点清晰:我并不介意针对该行获取异常-然后我可以简单地丢弃该行。问题是异常似乎发生在“for”循环本身上,这使得对该特定行的特殊处理变得不可能。