web-dev-qa-db-fra.com

UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder d'octet

Voici mon code, 

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

chaque fois que je lance ce code, il donne l'erreur suivante:

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

J'ai essayé de résoudre ce problème et d'ajouter un paramètre supplémentaire dans open (), le code ressemble à;

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

Mais encore une fois, cela donne la même erreur. que dois-je faire alors! S'il vous plaît aider.

113
SujitS

Comme suggéré par Mark Ransom, j'ai trouvé le bon encodage pour ce problème. Le codage étant "ISO-8859-1", le remplacement de open("u.item", encoding="utf-8") par open('u.item', encoding = "ISO-8859-1") résoudra le problème.

258
SujitS

Votre fichier ne contient pas réellement de données encodées en utf-8, il contient un autre encodage. Déterminez ce qu'est cet encodage et utilisez-le dans l'appel open.

Dans l'encodage Windows-1252, par exemple, 0xe9 serait le caractère é.

24
Mark Ransom

Également travaillé pour moi, ISO 8859-1 va économiser beaucoup, hahaha, surtout si vous utilisez les API de reconnaissance vocale

Exemple: 

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

Essayez ceci pour lire en utilisant des pandas 

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

Si vous utilisez Python 2, voici la solution:

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

Étant donné que le paramètre encoding ne fonctionne pas avec open(), vous obtiendrez l'erreur suivante:

 TypeError: 'encoding' est un argument de mot clé invalide pour cette fonction 
9
Jeril

Si quelqu'un cherche ces informations, voici un exemple de conversion d'un fichier CSV en Python 3:

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

Vous pouvez résoudre le problème avec:

for line in open(your_file_path, 'rb'):

'rb' lit le fichier en mode binaire. Lire la suite ici . J'espère que cela aidera!

1
Ozcar Nguyen

Parfois lorsque open(filepath) dans lequel filepath n'est en réalité pas un fichier, la même erreur se produit, assurez-vous tout d'abord que le fichier que vous essayez d'ouvrir existe:

import os
assert os.path.isfile(filepath)

espérons que cela aidera.

0
xtluo