Python脚本读取文件时出现UnicodeDecodeError解码错误求助
UnicodeDecodeError 问题分析与解决
你完全找对问题的根源了!就是这个read_str函数里的str_value.decode('utf-8')语句导致了解码错误。
为什么会报错?
从报错信息来看,程序尝试用UTF-8编码解码字节0xa5,但这个字节并不是有效的UTF-8起始字符——UTF-8的单字节字符范围是0x00-0x7F,0xa5属于多字节编码的片段,单独出现时不符合UTF-8的编码规则,自然会触发解码失败。
至于之前正常运行突然出错,大概率是输入的license_usage.bin文件内容发生了变化:可能是日志生成端写入了非UTF-8编码的字符,或者文件本身混入了其他编码的内容(比如GBK编码的字符,0xa5在GBK中是某些字符的组成部分)。
怎么修复?
这里给你几个可行的修复方案:
方案一:忽略无效字符
如果这些无法解码的字节不影响核心业务数据,可以在解码时添加错误忽略参数,跳过无效字符:return str_value.decode('utf-8', errors='ignore')方案二:尝试其他编码格式
猜测日志文件可能使用了其他编码(比如GBK、Latin-1),可以替换解码格式试试:# 尝试GBK编码(适合中文环境下的日志) return str_value.decode('gbk') # 或者用Latin-1(会把每个字节直接映射成对应字符,不会报错) return str_value.decode('latin-1')方案三:先确认文件编码
在Cygwin或Ubuntu终端里用file命令查看文件的实际编码:file license_usage.bin根据命令输出的编码信息,替换对应的解码格式即可。
额外建议
因为脚本之前能正常运行,说明之前的日志都是标准UTF-8编码,现在出现异常字节,你也可以同步排查日志生成的源头(比如写入日志的客户端是否有编码变更),从根源避免类似问题重复出现。
内容的提问来源于stack exchange,提问作者Laura Marinescu
相关产品推荐
相关产品推荐

