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

最新文章

  1. spring mvc(注解)上传文件的简单例子
  2. C++中 OOP相关的类型转换
  3. 常用mysql数据库引擎——MyISAM和InnoDB区别
  4. 必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序
  5. Http协议提要
  6. iis6.0报以下的错。。
  7. 一些常用的Git命令
  8. 追加文件内容java
  9. TCP传输小数据包效率问题(译自MSDN)
  10. 辗转相除法求最大公约数和最小公倍数【gcd】
  11. ACM/ICPC ZOJ1003-Crashing Balloon 解题代码
  12. 火星02坐标转换为WGS84坐标
  13. 正确合理的建立MYSQL数据库索引
  14. java Map 之 排序(key,value)
  15. 【深度学习系列】用PaddlePaddle进行车牌识别(一)
  16. 配置samba 服务器 共享Linux目录
  17. HGOI20181029模拟题解
  18. iOS 开发-Certificate、App ID和Provisioning Profile之间的关系
  19. 阿里云Redis开发规范[转]
  20. VS2015编译器按F6不能够重新生成

热门文章

  1. postgresql备份数据库
  2. centos 6 设置无密码登录ssh 不成功问题
  3. js中的onclick事件传参需要注意的问题
  4. Apache禁止访问网站子目录的方法
  5. Java 编码规范有感
  6. Linux下安装JDK及相关配置
  7. html标签补充
  8. cf1042F. Leaf Sets(贪心)
  9. Callback, Promise和Async/Await的对比
  10. POS开发问题 - 跳转页面更新,返回还原旧数据