UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position X
Unicode的解码错误:使用'utf-8'无法解码在X位置的0xd0字符
bug原因:这个csv
文件在写入时的编码并不是用utf-8
写入的,所以在读取的解码过程中(用utf-8
解码),就会报错
所以解决这个问题就需要知道这个csv
文件写入时是用哪种编码写入的,那么在读取时就可以用对应的编码读取:
#查看所要读取的csv文件 写入时的编码:
import chardet
f = open(r"你的csv文件路径",'rb')
its_code = f.read()
print(chardet.detect(its_code))
# 输出结果为:
# {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
因此在用pandas读取时应该这样:
import pandas as pd
data = pd.read_csv(r"你的csv文件路径",encoding='GB2312')#问题解决
网上的用记事本打开方式修改原来的编码,会导致乱码,而且治标不治本。
首要注意的一点是,如果这个csv
文件是你自己写的,那么就应该在写入时注意编码格式,而不是任其默认,那么作为一手写入csv
文件的你,当然就知道这个csv
文件的编码格式了。关键还是要规范:
with open("你所要写入的csv文件路径", "w", newline='',,encoding='utf-8-sig') as csvfile:
# 这里我通常写入的编码格式为'utf-8-sig',因为从爬取数据过程中即使存储为utf-8,也有乱码问题,一般'utf-8-sig'不会报错