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

Python ‘gbk’ codec can’t decode byte 0x80[通俗易懂]Python‘gbk’codeccan’tdecodebyte0x80前段时间,运行得好好的Python代码突然抛出如下错误:Traceback(mostrecentcalllast):File"C:\***\tools.py",line367,in__get_key_from_symline=file.readline()F…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

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 的编解码范围内。其对应的源码如下:

@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 文件的编码格式,但是此处所需的内容在文件的首行,可以确保的是首行中没有无法识别的特殊字符,所以可以先以 二进制 方式打开文件,然后将读取出来的内容使用某个格式来解码:

@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.net/197608.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux环境变量的设置和查看

    Linux环境变量的设置和查看一 Linux 的变量种类 nbsp nbsp nbsp nbsp nbsp 按变量的生存周期来划分 Linux 变量可分为两类 nbsp nbsp nbsp nbsp nbsp 1 永久的 需要修改配置文件 变量永久生效 nbsp nbsp nbsp nbsp nbsp 2 临时的 使用 export 命令声明即可 变量在关闭 shell 时失效 nbsp 二 设置变量的三种方法 1 在 etc profile 文件中添加变量 对所有用户生效 永久的 nbsp nbsp nbsp nbsp nbsp 用 VI 在文件 etc profile 文件

    2025年8月24日
    4
  • WEB日志格式

    WEB日志格式WEB日志格式日志格式类型:常见日志格式:参考:WEB日志格式CustomLogFormats:普通日志格式日志格式类型:目前常见的WEB日志格式主要由两类Apache的NCSA日志格式,NCSA格式分为NCSA普通日志格式(CLF)NCSA扩展日志格式(ECLF)IIS的W3C日志格式目前最常用的是NCSA扩展日志格式(ECLF…

    2022年6月10日
    33
  • Activiti流程引擎_activiti工作流原理

    Activiti流程引擎_activiti工作流原理Activiti框架提供的流程引擎配置类ProcessEngineConfiguration的类图如下:下面的图是流程引擎的架构图:由上图我们可以很清楚地从全局角度了解ProcessEngineConfiguration类:1)EngineServices:该接口中定义了获取各种服务类实例对象的方法。2)ProcessEngine:继承EngineServices接口,并增…

    2022年10月20日
    4
  • 论文写作利器—LaTeX教程(入门篇)(更新中)

    论文写作利器—LaTeX教程(入门篇)(更新中)一、LaTeX简介结合维基百科及LaTeX官网可知:LaTeX(/ˈlɑːtɛx/,常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/)是一种基于TeX的高品质排版系统,由美国计算机科学家莱斯利·兰伯特在20世纪80年代初期开发,非常适用于生成高印刷质量的科技和数学、物理文档,尤其擅长于复杂表格和数学公式的排版。LaTeX是科学文献交流和出版的事实标准。简单来说,相比于Word排版时需要设…

    2022年7月14日
    44
  • 8天学通MongoDB——第七天 运维技术

    8天学通MongoDB——第七天 运维技术

    2021年9月14日
    46
  • 操作系统第二章进程的描述与控制_进程同步和互斥的区别

    操作系统第二章进程的描述与控制_进程同步和互斥的区别什么是进程同步进程互斥的原则进程互斥的软件实现方法1、单标志法2、双标志先检查法3、双标志后检查法4、Peterson算法进程互斥的硬件实现方法1、中断屏蔽方法2、TestAndSetLock指令TSL和中断屏蔽的区别利用TSL完成进程间互斥-《现代操作系统》P713、XCHG指令信号量机制1、整型信号量2、记录型信号量(默认)记录型信号量定义P操作(wait操作)V操作(signal操作)信号量机制实现进程互斥信号量机制实现进程同步-前V后

    2025年10月19日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号