-1
votes

UTF-8 'Codec ne peut pas décoder octet 0xb5 en position 0: octet de départ invalide

J'essaie de combiner plusieurs fichiers CSV en une avec cette fonction: xxx

mais je reçois cette erreur: "utf-8 'codec ne peut pas décoder octet 0xb5 en position 0: octet de démarrage non valide

et voici la trace: xxx

Merci.


4 commentaires

On dirait que votre fichier n'est pas utf-8 . Vous devriez savoir dans lequel le codage a été sauvegardé et décoder. Ou peut-être que ce n'est pas un fichier texte du tout ...


En fait, ce n'est pas un fichier texte, il ne contient que des données numériques.


Nous ne pouvons pas vous dire le codage correct sans voir (un représentant, idéalement un petit échantillon de) le contenu réel des données dans une représentation sans ambiguïté; Un vidage hexagonal des octets problématiques avec quelques octets de contexte Aon, chaque côté est souvent suffisant, surtout si vous pouvez nous dire ce que vous pensez que ces octets sont suppressés à représenter. Voir aussi meta.stackoverflow.com/questions/379403 / ...


Tripleee.github.io/8bit/#b5 montre 25 interprétations possibles de cette valeur d'octet dans Différents codages 8 bits, mais aucun d'entre eux ne semble particulièrement probable ou utile.


5 Réponses :


0
votes

Tout d'abord, vous devez connaître le type d'encodage que vos fichiers CSV utilisent. Vous pouvez essayer d'utiliser Chardet: le détecteur de codage de caractères universel pour prédire le type de codage utilisé dans votre fichier CSV . Chardet peut être facilement installé à l'aide de: xxx pré>

Après avoir installé Chardet, vous pouvez utiliser la ligne de commande pour prédire le codage de votre fichier CSV à l'aide de: P>

df = pd.read_csv(filename, index_col=None, header=0, encoding='utf-8')


7 commentaires

La fonction Open () ne comprend pas le codage du fichier - il utilise le codage par défaut configuré pour Python, ce qui est dans ce cas UTF-8. Tout fichier que vous ouvrez dira "utf-8 ', mais si ce n'est pas vrai, il y aura une exception une fois que vous essayez de lire le fichier. Essayez-le - ouvrez du fichier binaire comme ça et voyez ce qui se passe.


@Yoavkleinberger merci pour l'information. Je l'ai édité en ajoutant un moyen de prédire le codage du fichier CSV.


Chardet n'est pas entré fiable, il utilise des heuristiques et n'examine pas l'ensemble du fichier d'entrée.


@tripleee a accepté. Il peut simplement prédire avec une confiance. Donc, je ne m'attends pas à ce qu'il soit précis à 100%. Autre que d'utiliser Chardet, nous devrions vérifier tous les codages possibles manuellement jusqu'à ce que nous trouvions un qui fonctionne. J'aimerais connaître une solution robuste au cas où vous en auriez un.


Il n'y a aucun moyen de connaître le codage à moins que vous sachiez également ce qu'il est censé représenter. Voir par exemple Stackoverflow.com/questions/27832597/... < / a> a une réponse de la mine qui implémente la boucle que vous proposez, bien que dans un contexte légèrement différent.


UTF-8 a déjà été exclu par le message d'erreur de l'OP. Googling for Duplicates me fait toutes sortes de suppositions improbables, parmi lesquelles GB2312 (un codage multi-octets chinois).



0
votes

J'essayerais:

pd.read_csv(filename, index_col=None, header=0, encoding='utf-8') #OR
pd.read_csv(filename, index_col=None, header=0, encoding='latin1')


0 commentaires

1
votes

Essayez de spécifier ceci:

df = pd.read_csv (nom de fichier, index_col = aucun, en-tête = 0, codage = 'latin-1')

Le codage latin-1 est magique - il ne manque jamais. Voyez ce que vous obtenez. Si cela est assez bon - bien vous y allez.

Sinon, vous devrez savoir ce qui codant pour utiliser les fichiers CSV. Vous pouvez simplement essayer beaucoup de codages différents jusqu'à ce que la réponse semble bien.


2 commentaires

Le problème avec c'est qu'il semble qu'il réussit même si les résultats sont complètement faux.


@tripleee vous êtes correct, peut-être que je n'étais pas assez clair dans la façon dont j'ai décrit ma suggestion. Il est censé être un travail autour, pas une vraie solution



1
votes

Comme je peux voir, il y a déjà de nombreuses réponses à coder par Pandas.

Voici une approche alternative: p>

with open(file_source, encoding="utf8", errors='ignore') as file:
    # Your code goes here


2 commentaires

Je ne pense pas à essayer d'ouvrir comme UTF-8 et d'ignorer les erreurs est le bon moyen de le faire, car il pourrait ne pas être utf-8 du tout. En outre, OP voulait utiliser des pandas.


Oui, vous êtes correct .. Maintenant, j'ai modifié ma réponse, car c'est une solution alternative. Cela pourrait être utile pour les autres qui n'utilisent pas de pandas.



0
votes

Cela a fonctionné pour moi xxx


0 commentaires