您的位置:首页 > 编程语言 > Python开发

Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequ

2018-03-08 11:44 1061 查看
Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence"之类的编码或解码的错误时如何处理【背景】问题参见: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内容是乱码”

公告

昵称:大雄fcl
园龄:3年5个月
粉丝:10
关注:6+加关注
<2018年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

搜索

  

常用链接

我的随笔
我的评论
我的参与
最新评论
我的标签

随笔分类

Algorithm(2)ANT(2)C / C++(5)DataBase(6)Deep Learning(9)ElasticSearch(3)IR(2)Java(26)JSON(4)Lucene(3)Mathematics(1)MATLAB(2)NLP-Machine Learning(33)Other(6)Python(26)Recommend(1)Service(1)Spring(3)Struct2(1)SVN(4)

随笔档案

2018年1月 (1)2017年12月 (4)2017年11月 (4)2017年8月 (7)2017年7月 (3)2017年6月 (7)2017年5月 (5)2017年4月 (3)2017年2月 (1)2017年1月 (2)2016年12月 (1)2016年11月 (5)2016年10月 (1)2016年7月 (1)2016年6月 (3)2016年4月 (6)2016年3月 (4)2016年2月 (5)2016年1月 (12)2015年12月 (7)2015年11月 (7)2015年10月 (10)2015年9月 (3)2015年8月 (1)2015年7月 (3)2015年6月 (2)2015年5月 (10)2015年4月 (2)2015年3月 (5)2015年2月 (1)2015年1月 (6)2014年12月 (2)2014年11月 (15)

文章分类

AlgorithmDatabaseJava(1)Mathematics(1)Other(1)python(35)

最新评论

1. Re:使用Runtime.getRuntime().exec()在java中调用python脚本
你好,我也是发现网上的Java、python混编方法python脚本根本没有执行。看到了你的方法,想请问一下这一句是什么意思?...
--sharoncmt
2. Re:Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence"之类的编码或解码的错误时如何处理
写得很好,通俗易懂,还很详细
--Automation

阅读排行榜

1. 用Runtime.getRuntime().exec()需要注意的地方(14887)
2. DeepLearning之路(二)SoftMax回归(6406)
3. 用ant进行编译和打包(java)(3320)
4. ICTCLA中科院分词工具用法(java)(3122)
5. python 获取脚本所在目录(2811)

评论排行榜

1. 使用Runtime.getRuntime().exec()在java中调用python脚本(1)

推荐排行榜

1. 用Runtime.getRuntime().exec()需要注意的地方(1)
2. 使用Runtime.getRuntime().exec()在java中调用python脚本(1)
3. python 获取脚本所在目录(1)
4. DeepLearning之路(二)SoftMax回归(1)
5. 用ant进行编译和打包(java)(1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐