• Python读取内容UnicodeDecodeError错误


    1、错误现象

    环境:Python3.7

    描述:

    1. 用open方法获取文件句柄;
    2. 用read/readlines方法一次读取文件所有内容;
    3. 尝试了编码GB2312/GBK/GB18030/UTF-8,发现UnicodeDecodeError报错没有解决。
    4. 查看读取的文件。是txt的文件,文件大小30-50MB左右。
    5. 用notepad++打开这个文件,发现正常打开,发现编码是GB2312

    下面是报错过程:

    Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)]
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.3.0 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: f = open('test.txt', encoding='GB2312')
    
    In [2]: lines = f.readlines()
    ---------------------------------------------------------------------------
    UnicodeDecodeError                        Traceback (most recent call last)
    <ipython-input-2-d1e99c5e7da7> in <module>
    ----> 1 lines = f.readlines()
    
    UnicodeDecodeError: 'gb2312' codec can't decode byte 0xf4 in position 7927: illegal multibyte sequence

    2、资料查阅

    查阅资料过程:

    1. UnicodeDecodeError为关键字查阅资料。发现几乎所有资料都是指定encoding。
    2. 查阅python官方文档。文档中关于open方法的说明。然后发现有参数errors。这个参数默认是strict,即有异常即报错。官方文档说明可以设置为ignore,这样忽略错误。

    3、错误解决

    解决的python代码:

      1: In [3]: f = open('test.txt', encoding='GB2312', errors='ignore')
    
      2: 
    
      3: In [4]: l = f.readlines()
    
      4: 
    
      5: In [5]:

    4、回顾

    这个问题困扰了我将近半天的时间,发现尝试编码不能解决后,就做别的事情去了。过了一会儿突然就想看看官方说明,然后就发现了官方文档的解决办法。

    所以觉得官方文档真的是一个取之不尽用之不竭的宝库。遇到问题多看官方文档,这是一个好习惯。

    5、参考

    官方参考文档:

    1. open方法的官方说明:https://docs.python.org/3/library/functions.html#open
    2. open方法支持的编码说明:https://docs.python.org/3/library/codecs.html#module-codecs
    3. 关于open方法获取的文件句柄报错处理的参考:https://docs.python.org/3/library/codecs.html#codec-base-classes
  • 相关阅读:
    Linux 三剑客之SED
    搭建Docker环境
    Docker rabbitmq
    Docker Redis 集群
    Docker Mysql
    lerna 大前端项目代码重用解决方案
    将create-react-app从javascript迁移到typescript
    使用 React hooks 优雅解决 mp3 的播放 和 暂停
    React 代码 Import Svg as ReactComponent 失败
    vue3 自定义 hooks 优雅处理异步调用 ajax
  • 原文地址:https://www.cnblogs.com/mehome/p/10549798.html
Copyright © 2020-2023  润新知