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

python 3 UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte

2018-01-22 10:45 381 查看
出现错误的情景:

读取文件时: 

with open(path,'r','utf8') as fp:

       content=fp.read()

分析及解决方案:

【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字符串,但是结果却解码出错了

解决办法:

1. 利用notepad++或者python的chardet模块确定当前文件的编码格式,并以其编码格式解码。

2.原代码改为:

with open(path,'rb') as fp:

          content=fp.read()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐