首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python ‘gbk’ codec can’t decode byte 0x80[通俗易懂]

Python ‘gbk’ codec can’t decode byte 0x80[通俗易懂]

作者头像
全栈程序员站长
发布2022-10-03 11:55:09
发布2022-10-03 11:55:09
4.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

Python ‘gbk’ codec can’t decode byte 0x80

前段时间,运行得好好的 Python 代码突然抛出如下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\***\tools.py", line 367, in __get_key_from_sym
    line = file.readline()
  File "C:\Python\Python35-32\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 3223: invalid start byte

从错误提示来看,应该是文件编码的问题,文件中含有 gbk 无法解码的内容,某个字符的起始字节为 0x80,不在 gbk 的编解码范围内。其对应的源码如下:

代码语言:javascript
复制
@staticmethod def __get_key_from_sym(sym): with open(sym) as file: line = file.readline() if line: keys = line.split() if len(keys) >= 4: return keys[3] 

如上代码所示,先是以文件流的形式打开 sym 文件,然后逐行读取文件,直至找到所需内容。错误出在 line = file.readline() 一行,原因在于其上一行 open(sym) 使用的编解码格式不适合。在未指定编解码格式的情况下,open(sym) 会使用平台相关的编解码器来解析文件,此处使用的是 gbk ,而 0x80 不是 gbk 能够识别的起始字节。

解决方案

尝试将编解码格式设置为 UTF8 等,即 with open(sym, encoding='UTF8') as file,仍然无法解决问题。虽然无法确定 sym 文件的编码格式,但是此处所需的内容在文件的首行,可以确保的是首行中没有无法识别的特殊字符,所以可以先以 二进制 方式打开文件,然后将读取出来的内容使用某个格式来解码:

代码语言:javascript
复制
@staticmethod def __get_key_from_sym(sym): with open(sym, "rb") as file: # 文件编码不确定,以二进制方式打开 line = file.readline() if line: keys = line.decode("utf-8").split() # 尝试用 utf-8 来解码(相关行无特殊字符) if len(keys) >= 4: return keys[3] 

当然,此处只是规避了问题,如果要从根本上解决问题,还是要选择合适的编解码格式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197608.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月3日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python ‘gbk’ codec can’t decode byte 0x80
    • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档