首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnicodeDecodeError:'utf-8‘编解码器无法解码0位置的字节0xa5 :无效的开始字节

UnicodeDecodeError:'utf-8‘编解码器无法解码0位置的字节0xa5 :无效的开始字节
EN

Stack Overflow用户
提问于 2019-10-09 12:04:15
回答 1查看 1K关注 0票数 0
代码语言:javascript
复制
$ python3 parse_peak_user_log.py license_usage.bin  --export ~/usage.xlsx --export-type xlsx
Traceback (most recent call last):
  File "parse_peak_user_log.py", line 455, in <module>
    parser.parse()
  File "parse_peak_user_log.py", line 237, in parse
    return self.parse_open_file(open_file)
  File "parse_peak_user_log.py", line 254, in parse_open_file
    if not self.parse_four_cc(open_file):
  File "parse_peak_user_log.py", line 334, in parse_four_cc
    four_cc = self.read_str(open_file, 4, True)
  File "parse_peak_user_log.py", line 354, in read_str
    return str_value.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa5 in position 0: invalid start byte

代码应该可以工作,因为我从一个不同的来源收到它,它确实工作了几天。突然之间,没有修改任何东西,我就被这个错误困住了。我试图在cygwin64或Ubuntu的帮助下运行python脚本,在这两个终端上,我都会收到相同的错误。

我不太熟悉python,但我确实理解问题的所在。我唯一不明白的是,脚本中有以下代码:

代码语言:javascript
复制
def read_str(self, open_file, length, append):
    str_value = open_file.read(length)
    if append:
        self.log_data += str_value
    return str_value.decode('utf-8')

这不应该是解码问题吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-10-09 13:54:53

不应该是解码问题吗?

只有当您的文件实际上是在utf-8中编码时,情况就不是这样了。如果文件中的编码是"latin1“,则”\xa5 5“字节表示”元“--它主要用于世界各地,包括西部安装Windows。

如果在这些数据中“元”的存在对您来说是有意义的,那么确定该文件是用latin1编码的(类似于"cp1252",有几个字符的差异)--只需将解码行替换为:

代码语言:javascript
复制
return str_value.decode('latin1')

您的代码应该适用于此文件。否则,即字符应该是另一回事,那么您必须通过其他方式猜测文件的正确编码(例如,如果文件是西里尔字母CP855,文件中相同的“\xa5 5”字节代表'Ц‘字符)。

在上述代码的另一个注意事项中--代码试图以二进制模式读取文件(假设,因为正在解码竞赛),但是,在这种情况下,没有注意字符的所有字节都没有读取。也就是说,utf-8编码中的一个字符可以有1-4字节的长度--如果"str_value“读取部分字符,则解码步骤将失败。(即使文件实际上是utf-8编码,也可能是这种情况)。正确的做法是将文件作为文本打开,并让Python编解码器处理解码步骤。

换句话说:任何代码创建的open_file都应该执行open("<filename>", "rt", encoding="latin1") (如果任何其他代码将self.log_data视为字节而不是文本,即尝试调用self.log_data.decode,则也应该进行更改(只需删除".decode“调用)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58303744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档