python编码问题,错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte

1.python读取一个csv文件,报错:

with open('时政测验.csv','r') as f:  
错误信息:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte

2.解释:

这篇文章是windows创建的,使用的是gbk编码。
而我的mac系统默认编码是utf-8:
(mac终端,执行locale命令,查看默认编码)

2021-12-25 ➤ locale                                                            
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

所以python读取的时候,如果不指定编码,就会报上面错误。

3.修改:

读取时候,加上:,encoding='gb18030'

with open('时政测验.csv','r',encoding='gbk') as f: 

4.再啰嗦一下的解释

可以简单理解,一篇文章存储在计算机里,最终都是二进制形式。
比如一个汉字:你好:
gbk可能这样存储:01010111 01010111
utf-8可能这样存储:11011001 11011001 11011001

你的程序运行在mac上,默认的编码是mac的编码utf-8,而这篇文章是windows创建的,使用的是gbk编码。
所以你的程序不认识文章里的字,所以指定一下用gbk来读取就可以了。

5.关于gbk和utf-8

Python小镇 -- 非常详细的字符编码讲解,ASCII、GB2312、GBK、Unicode、UTF-8等知识点都有

Python小镇,讲的很好:

end