UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbd in position 0: invalid start byte
我遇到该错误的地方有两处:
f = open('D:/test.csv','r',encoding='utf8')
f.readlines()
df = pd.read_csv('D:/test.csv')
该test.csv是gbk编码。open时指定了utf8解码、pd.read_csv应该默认是utf8解码,所以编码与解码方案不对称。当更改一下解码方案就解决了,代码如下,则不会报错,正常读取。关于open函数的使用参考链接。
f = open('D:/test.csv','r')
f.readlines()
df = pd.read_csv('D:/test.csv',encoding='gbk')
场景说完,我们来解读错误原因。UnicodeDecodeError:Unicode 解码时的错误。 ‘utf-8’ codec can’t decode byte 0xbd in position 0: invalid start byte翻译:utf8解码器无法解码位置0处的0xbd字节,无效的起始字节。
Unicode为什么要解码?因为我们的数据存储时都是二进制,而且是使用了一定编码方式的二进制。当我们用程序读取时,就需要将二进制从存储中拿出来然后使用解码方案去解码呈现出人类可读的数据。当编码方案与解码方案不对称时,就发生解码错误。关于编码方案与解码方案的具体种类和细节,我们后面再讨论。
可以使用UltraEdit和notepad++两个文本编辑器查看和修改文件的编码。
So,理解了上面错误的原因后,对于下面 ↓ 的“双胞胎”型错误也就迎刃而解了吧!
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xab in position 20: illegal multibyte sequen