'xxx' codec can't decode byte xxx常见编码错误处理

by:授客 QQ1033553122

测试环境

python 3.3.2

win7

问题描述

利用python文件io方法 open打开文件,读取文件时报错,提示类似如下错误:

'xxx' codec can't decode byte xxx in position xxxx

经过好一番摸索,才大致搞懂其中的来弄去脉,暂且不说原因吧,来看下笔者做的几个实验。

源代码文件大致如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'shouke'

def testfn():

str_dic_list = []

f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r')  # 代码行8

counter = 0

is_found= 0

for line in f:

……(做一些处理)

testfn()

实践探索

实验1

文件(saofu-weixin.log.2016-11-08.log,以下不再赘述)编码设置:ANSI格式编码

代码行8:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r')

运行报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 4055: illegal multibyte sequence

代码行8:f = open(''d:\\saofu-weixin.log.2016-11-08.log'', 'r',encoding='utf-8')

运行报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 744: invalid start byte

实验2

文件编码设置:UTF-8 无BOM格式编码

代码行8:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r')

运行报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x81 in position 756: illegal multibyte sequence

代码行8:

f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r',encoding='utf-8')

运行不报错

实验3

文件编码设置:USC-2 Big Endia格式编码、USC-2 Little Endia格式编码

代码行8:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r',encoding='utf-8')

运行报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 0: invalid start byte

代码行8:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r')

运行报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xfe in position 0: illegal multibyte sequence

实验4

文件编码设置:UTF-8格式编码

源代码文件编码设置:

# -*- coding:gbk -*-

# -*- coding:gb2312 -*-

# -*- coding:utf-8 -*-

代码行8:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r')

运行报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

代码行:f = open('d:\\saofu-weixin.log.2016-11-08.log', 'r',encoding='utf-8')

运行不报错

原因分析

通过上述错误提示,我们可以得出结论:

1、出错了,错误类型为“UnicodeDecodeError”,大致意思是Unicode解码错误

2、具体原因是: 'xxx' codec can't decode byte xxxx in position xx,大致意思就是解码器codec用‘xxx’编码去解码位于xx位置处的xxxx字节

3、进一步细化错误为:illegal multibyte sequence(非法多字节序列) 或者invalid start byte(非法的起始字符)

通过实验,我们可以得出结论:

按日志文件自身的编码打开并读取文件内容时,运行不报错。

综上结论

1、python对编码转换的处理:从一种编码到另一种编(暂且称为目标编码)的转换,python会先把目标按某种编码解码为Unicode编码,然后再转换为目标编码。

2、利用python的open打开文件时,最好显示的指定编码,即按指定编码打开文件,且该指定编码必须和被打开文件自身的编码设置保持一致,否则可能会导致解码出错,直白的说,被打开文件是什么编码,就用什么编码去打开文件进行解码。

3、python源代码文件中的注释 # -*- coding: encoding -*- 和文件解码无关,仅针对脚本文件中在内容,比如中文字符串。

附:关于源代码编码说明

默认的,python源代码文件编码被视为UTF-8编码。按那种编码方式,世界上大多数语言的字符可以同时用于字符串字面量,标识符和注释 - 尽管标准库只使用ASCII字符作为标识符,任何可移植代码应该遵循的约定。为了更恰当的展示所有这些字符,你的编辑器必须能够识别到源代码文件为UTF-8,且必须使用一种能支持文件中所有字符的字体。

我们也可以为源代码文件指定其它不同的的编码。在“#!”行之后添加如下注释语句:

# -*- coding: encoding -*-

指定编码后,源文件中的所有东西都被视为按指定编码格式编码,而非UTF-8编码。

官方原文:By default, Python source files are treated as encoded in UTF-8. In that encoding, characters of most languages in the world can be used simultaneously in string literals, identifiers and comments — although the standard library only uses ASCII characters for identifiers, a convention that any portable code should follow. To display all these characters properly, your editor must recognize that the file is UTF-8, and it must use a font that supports all the characters in the file

It is also possible to specify a different encoding for source files. In order to do this, put one more special comment line right after the #! line to define the source file encoding:

# -*- coding: encoding -*-

With that declaration, everything in the source file will be treated as having the encoding encoding instead of UTF-8

转载于:https://www.cnblogs.com/shouke/p/10157660.html

Python 'xxx' codec can't decode byte xxx常见编码错相关推荐

  1. Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data

    近日用pandas的read_csv读取中文文本文件时报错:python 'utf-8' codec can't decode byte 0xe3 in position 0: unexpected ...

  2. Python 'gbk' codec can't decode byte 0x80

    Python 'gbk' codec can't decode byte 0x80 前段时间,运行得好好的 Python 代码突然抛出如下错误: Traceback (most recent call ...

  3. python 'utf-8' codec can't decode byte 0xca in position 21: invalid continuation byte

    今早起来肝网课的时候在通过路径把数据集导入到jupyter 里面的时候报了如下错误 'utf-8' codec can't decode byte 0xca in position 21: inval ...

  4. 解决Python:'utf-8' codec can't decode byte 0xfc in position 14: invalid start byte

    读取了一个.amc的骨骼信息文件,然后报错: 'utf-8' codec can't decode byte 0xfc in position 14: invalid start byte 解决方法很 ...

  5. 解决UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c

    问题 这是在参照Yoon Kim的github实现论文Convolutional Neural Networks for Sentence Classification时遇到的问题.代码中使用的是经过 ...

  6. ‘gbk‘ codec can‘t decode byte 0x80 in position

    大于127GBK无法解码 大于80超出了GBK编码范围 Python 'gbk' codec can't decode byte 0x80 删掉.decode("GBK").enc ...

  7. Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...

    由于主机名为中文导致的 flask 服务起不来,报错如下: File "D:\work\python3.9_64\lib\socket.py", line 791, in getf ...

  8. Python 的编码问题UnicodeDecodeError: 'ascii' codec can't decode byte ××× in postition

    [问题描述] 运行环境, Ubuntu14.04 64bit 在用Python跑程序分析文本的时候出现了下面的报错信息: UnicodeDecodeError: 'ascii' codec can't ...

  9. 解决Python报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte

    解决Python报错–UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte ...

最新文章

  1. 「云端 JavaScript 漫游指南」
  2. python2和python3如何共存_Windows下python2和python3的共存设置
  3. ffmpeg分析系列
  4. 牛客16502 螺旋矩阵
  5. 开发人员指南 Googlemap API教程
  6. PDF文件能编辑吗,怎么删除PDF文档中的空白页
  7. (转)Sublime Text 2 设置文件详解
  8. showModalDialog()、showModelessDialog()方法使用详解
  9. 宁德时代钠电池雷声大,雨点小?
  10. 金秋发布会·实在里程碑,从RPA 向 IPA 进军!
  11. ubuntu壁纸1080p
  12. 程序员自爆奇葩入职原因:进腾讯是为了不用续费年费会员,进抖音是想天天上班刷抖音
  13. 【Element ui 的NavMenu二级菜单下拉icon修改】
  14. adlds文件服务器,Windows轻型目录(AD LDS)的备份恢复
  15. 百万人同时在线直播的服务器,QQ游戏百万人同时在线的服务器架构实现
  16. 2020汽车消费把脉:如何挠到年轻消费者的内心?
  17. Facebook Rebound 弹性动画库 源码分析
  18. 安装Adobe Illustrator(AI) CC 2017 后弹出quot;无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dllquot;
  19. 制作哔哩哔哩弹幕词云
  20. MapReduce的分片机制源码解析

热门文章

  1. 在Hadoop中用Python实现MapReduce代码
  2. 云从科技助力智慧出行:登机安检更加“智能” | 百万人学AI评选
  3. BIM建筑环境规则和分析(BERA)语言介绍(四)第三章 BERA语言设计
  4. 【纯记录】谨以此文悼念我为此失去的时间|vim+pyclewn|
  5. 10年固守的小圈子,可能是未来最大的障碍
  6. DELL EqualLogic PS6100存储数据恢复方法和结构详解
  7. 生成函数(常见幂级数、广义二项式定理、生成函数的应用)
  8. 10A10-ASEMI整流二极管10A10
  9. ios安卓模拟器_【MOD 2.9】崩坏3 跨端/改服 安装包 V2.9.0 [iOS/安卓]
  10. CAD-强电常用符号集