Python3.6读取CSV文件时出现UTF-8解码错误求助
解决Python CSV读取时的UTF-8解码错误
嘿,我来帮你搞定这个CSV解码的问题~
你用Python 3.6写的这段读取CSV的代码:
import csv with open('data1.csv', newline='') as f: reader = csv.reader(f) for row in reader: print(row)
运行后碰到了这个头疼的错误,核心提示是:
'utf-8' codec can't decode byte 0x95 in position 11: invalid start byte
问题原因
这个错误的本质是:你的data1.csv文件不是用UTF-8编码保存的,但Python默认会用UTF-8去解码文件内容,所以遇到了它识别不了的字节(比如这里的0x95)就报错了。常见的非UTF-8编码有cp1252(Windows系统常用的编码,0x95在这个编码里是个特殊的项目符号)、GBK、GB2312等等。
解决方案
1. 指定正确的编码格式打开文件
你可以先试试用cp1252编码打开,毕竟0x95这个字节在这个编码里很常见,修改后的代码如下:
import csv # 尝试用cp1252编码,不行的话可以换成gbk、gb2312再试 with open('data1.csv', newline='', encoding='cp1252') as f: reader = csv.reader(f) for row in reader: print(row)
要是不知道文件到底是什么编码,可以用chardet库来检测:
先安装chardet:
pip install chardet
然后运行这段检测代码:
import chardet with open('data1.csv', 'rb') as f: detection_result = chardet.detect(f.read()) print(f"推测文件编码为:{detection_result['encoding']}")
拿到检测出的编码后,把它填到open()函数的encoding参数里就ok了。
2. 忽略解码错误(不推荐)
如果只是想快速查看文件内容,不在乎少量字符丢失,可以添加errors='ignore'参数,但这种方式会直接丢掉无法解码的字符,重要数据千万别这么用:
import csv with open('data1.csv', newline='', encoding='utf-8', errors='ignore') as f: reader = csv.reader(f) for row in reader: print(row)
内容的提问来源于stack exchange,提问作者sayalmondbutter
相关产品推荐
相关产品推荐

