UnicodeDecodeError:'utf-8'编解码器无法解码字节

这是我的代码,

for line in open('u.item'): #read each line 

每当我运行这个代码,它会给出以下错误:

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte 

我试图解决这个问题,并在open()中添加一个额外的参数,代码看起来像;

 for line in open('u.item', encoding='utf-8'): #read each line 

但是它也会给出同样的错误。 那么我该怎么做! 请帮忙。

正如Mark Ransom所build议的,我发现了这个问题的正确编码。 编码是“ISO-8859-1”,所以用open("u.item", encoding="utf-8") open('u.item', encoding = "ISO-8859-1")replaceopen("u.item", encoding="utf-8") open('u.item', encoding = "ISO-8859-1")将解决问题。

你的文件实际上并不包含utf-8编码的数据,它包含了一些其他的编码。 找出那个编码是什么,并在open电话中使用它。

例如在Windows-1252编码中, 0xe9就是字符é

尝试使用pandas阅读

 pd.read_csv('u.item', sep='|', names=m_cols , encoding='latin-1') 

如果你使用的是Python 2 ,那么解决scheme如下:

 import io for line in io.open("u.item", encoding="ISO-8859-1"): # do something 

由于encoding参数不能与open() ,您将会收到以下错误:

 TypeError:'encoding'是这个函数的一个无效的关键字参数

如果有人正在寻找这些,这是一个在Python 3中转换CSV文件的例子:

 try: inputReader = csv.reader(open(argv[1], encoding='ISO-8859-1'), delimiter=',',quotechar='"') except IOError: pass 

也为我工作,ISO 8859-1将节省很多,哈哈,主要是如果使用语音识别API的

例:

 file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1");