UnicodeDecodeError: le codec 'charmap' ne peut pas décoder l'octet X en position Y: les cartes de caractères à
J'essaie d'obtenir un programme Python 3 pour faire quelques manipulations avec un fichier texte rempli d'informations. Cependant, en essayant de lire le fichier, j'obtiens l'erreur suivante:
Traceback (most recent call last):
File "SCRIPT LOCATION", line NUMBER, in <module>
text = file.read()
File "C:Python31libencodingscp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to <undefined>
Si quelqu'un pouvait me donner de l'aide pour essayer de surmonter ce problème, je serais très reconnaissant.
3 réponses
Le fichier en question n'utilise pas l'encodage CP1252
. Il utilise un autre encodage. Ce que vous avez à comprendre vous-même. Les communes sont Latin-1
et UTF-8
. Puisque 0x90 ne signifie rien dansLatin-1
, UTF-8
(Où 0x90 est un octet de continuation) est plus probable.
Vous spécifiez l'encodage lorsque vous ouvrez le fichier:
file = open(filename, encoding="utf8")
Comme extension de @ LennartRegebro réponse:
Si vous ne pouvez pas dire de quel codage il s'agit et que la solution ci - dessus ne fonctionne pas (ce n'est pas utf8
) et que vous vous êtes retrouvé à deviner-il existe des outils en ligne que vous pouvez utiliser pour identifier ce codage. Ils ne sont pas parfaits mais fonctionnent généralement très bien. Après avoir compris l'encodage, vous devriez être en mesure d'utiliser la solution ci-dessus.
EDIT: (Copié à partir du commentaire)
Un éditeur de texte très populaire Sublime Text
A une commande pour afficher l'encodage si elle a été définie...
- Aller à
View
->Show Console
(ou Ctrl+`)
- tapez dans le champ en bas
view.encoding()
et espérez le meilleur (j'ai été incapable d'obtenir autre chose queUndefined
mais peut-être que vous aurez plus de chance...)
Juste pour ajouter au cas où file = open(filename, encoding="utf8")
ne fonctionne pas
essayez file = open(filename, errors='ignore')
Tout va bien