python读取文件解码失败
python2.7 urllib2 抓取新浪乱码
中的:
报错的异常是
UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence
此问题,还是很具有代表性的,此处,专门整理如下:
【Python中如何处理UnicodeDecodeError和UnicodeEncodeError】
简答:
1.仔细分析错误的类型
2.搞清自己处理的字符串是什么类型的
3.然后换用这种的字符编码去编码或解码
详解:
以上面的错误:
UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence
为例,去解释,如何处理这类问题:
1.仔细分析错误的类型
(1)错误是Unicode的编码还是解码
对于此处,错误是:
UnicodeDecodeError
的类型的。
此英文,对应的中文的含义,其实已经很清楚了:
Unicode的解码(Decode)出现错误(Error)了
而对于上面这句,我们可以推断出:
你当前正在处理某种编码类型的字符串
此处你要处理字符串,是想要将该字符串去解码decode,变成Unicode
但是将该字符串解码变成Unicode期间,却出错了
(2)所用的是何种编码
好的,接着看上面的错误:
‘gbk’ codec can’t decode
使得错误信息更加明显了:
你此处,要将字符串解码为Unicode,是以gbk编码的方式去解码(该字符串变成Unicode)的
但是此处通过gbk的方式,却无法解码(can’t decode )
注:此处的codec,意思是:编解码(器),是Python内部的模块,用来编码或解码(字符串)的
(3)错误位置
bytes in position 2-3
此处的信息,后续一般也很少用到。
有时候会用于定位具体错误的位置。
此处暂且忽略。
(4)错误的细节错误类型
illegal multibyte sequence
翻译为中文为:
非法的,多字节,序列
简单说就是:
没法(解码)了。
【原因及解决办法】
好了,针对于上面所分析出来的信息:
将一个字符串,通过gbk的方式,去解码,想要获得Unicode字符串,结果出错了
我们来说说原因和解决办法:
此种错误,有几种可能:
(1)要处理的字符串本身不是gbk编码,但是你却以gbk编码去解码
比如,字符串本身是utf-8的,但是你却用gbk去解码utf-8的字符串,所以结果不用说,则必然出错
则必然会出现这类的错误,说是,用gbk的方式去解码字符串,想要获得Unicode字符串,但是结果却解码出错了
解决办法:
如果你确定当前字符串,比如抓取网页通过charset=utf-8,已经确定html的字符串是utf-8的,
则可以直接去通过utf-8去解码。
相关参考内容:
详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
中的:
【整理】关于HTML网页源码的字符编码(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解释
而如果本身对于所处理的字符串,不太清楚是什么编码类型的,可以尝试去通过chardet等模块,去检测看看:
【教程】如何用Python中的chardet去检测字符编码类型
然后搞清楚了,确定了,字符串是什么类型,然后再去解码。
提示:
关于字符串编码的类型,作为背景学习知识,也应该去了解一下。
这样对于以后处理字符串方面,会更有帮助。
(2)你没有主动的去将字符串编码为对应的Unicode,但是结果也报上面的UnicodeDecodeError的错误
这个情况,最常见的,就是我之前在:
【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法
所整理过的:
“Python中,打印字符串时,字符串本身的编码,与输出终端中所用编码不匹配”
此处不再赘述,只简要再说一下:
如果你本身拿到的是utf-8等,非gbk编码的字符串,然后用print去打印出来
在windows系统就是输出到cmd中
而cmd中,(对于多数中国人所用的是中文的系统)默认字符编码是gbk
从而导致此种现象:
python要将utf-8编码的字符串,在gbk的cmd的中打印出来
所以先要去尝试,用gbk的编码,解码为Unicode然后再打印出来
结果就出现此处的错误了。
详细解释,还是参见上面的教程。
其中还有示例代码的。
(3)处理的字符的确是gbk的,但是其中夹杂的部分特殊字符,是gbk编码中所没有的
如果有些特殊字符是GB18030中有的,但是是gbk中没有的。
则用gbk去解码,去所不支持的字符,也比如会出错。
所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。
提示:
如果对于GBK,GB18030,以及GB2312不了解,则可参考:
字符编码简明教程
另外:
如果遇到其他的,类似此中错误的,比如:
UnicodeEncodeError: 'gbk' codec can't encode character u'\u3232' in position 0: illegal multibyte sequence
等类型的错误,你就可以按照上述的思路,去分析,错误的现象,原因,然后通过自己,就可以找到解决办法了。
注:
其他和这类错误相关的,也还有一些可以参考的:
【总结】静态网页抓取,动态网页抓取,模拟登陆的注意事项和心得
中的:“返回的html内容是乱码”
python读取文件解码失败的更多相关文章
- python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...
- python 读取文件read.csv报错 OSError: Initializing from file failed
小编在用python 读取文件read.csv的时候 报了一个错误 OSError: Initializing from file failed 初始化 文件失败 检查了文件路径,没问题 那应该是我文 ...
- Python 读取文件中unicode编码转成中文显示问题
Python读取文件中的字符串已经是unicode编码,如:\u53eb\u6211,需要转换成中文时有两种方式 1.使用eval: eval("u"+"\'" ...
- 【python】python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte sequence
python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte ...
- python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence
python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal m ...
- 解决 python 读取文件乱码问题(UnicodeDecodeError)
解决 python 读取文件乱码问题(UnicodeDecodeError) 确定你的文件的编码,下面的代码将以'utf-8'为例,否则会忽略编码错误导致输出乱码 解决方案一 with open(r' ...
- python读取文件首行和最后一行
python读取文件最后一行两种方式 1)常规方法:从前往后依次读取 步骤:open打开文件. 读取文件,把文件所有行读入内存. 遍历所有行,提取指定行的数据. 优点:简单,方便 缺点:当文件大了以后 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- python 读取文件时报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence p ...
随机推荐
- JavaEE笔记(九)
List.Map.Set的配置 bean package com.spring.bean; import java.util.List; import java.util.Map; import ja ...
- Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh在项目构建时,jenkins使用 ...
- setInterval只执行一次的原因
setInterval(arrow(),) 改为: setInterval(arrow,) 原因: arrow()这是一个函数调用,函数调用就会有返回值, 而arrow()没有返回值,所以这里的arr ...
- 用 Python 给程序加个进度条,让你的看起来更炫酷?
对于开发或者运维来说,使用 Python 去完成一些跑批任务,或者做一些监控事件是非常正常的情况.那么如何有效地监控任务的进度?除了在任务中加上 Log 外,还能不能有另一种方式来了解任务进展到哪一步 ...
- UWP 卡片视图 Card View
上一篇 提到了 UWP 轨道视图Orbit View,这次就说一下卡片视图,毕竟两个差不多. 卡片视图,效果如其名,卡片一样,左右滑动,当然能翻牌最好了. 嗯,我这个可以的额(⊙﹏⊙)... 看下效果 ...
- 六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?
引言 鉴于五一期间超大的人流量,LZ思来想去,最终还是选择蜗居在自己的出租屋.无聊之际,当然不能忘了做点什么事情,于是LZ就研究了一下几种语言的皮毛,在这里献丑一翻,希望各位猿友莫要见笑. 不过说来也 ...
- 树莓派修改VNC分辨率
1.打开终端输入 sudo raspi-config 2. 选择 Advanced Options 再选择 Resolution 3.选择想要的分辨率,确定 4.重启
- 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读
本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...
- Unity扩展编辑器一
将Test1脚本挂在摄像机上 如图展示 下面我们需要在代码中动态的编辑它,请在你的Project视图中创建一个Editor文件夹,把MyEditor放进Editor文件夹中 在OnInsp ...
- 3星|《规避政治风险:全球化企业必修课》:中国将赢得5G竞争
规避政治风险:全球化企业必修课(<哈佛商业评论>增刊) <哈佛商业评论>的两篇文章+<财经>的1篇文章.把<财经>的文章放到增刊中,好像是第一次,我觉得 ...