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

出现错误的情景:

读取文件时: 

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()

猜你喜欢

转载自blog.csdn.net/yangnianjinxin/article/details/79126267