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.

263
demandé sur abccd 2012-02-10 22:43:57

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")
454
répondu Lennart Regebro 2017-09-05 13:05:51

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...

  1. Aller à View -> Show Console (ou Ctrl+`)

entrez la description de l'image ici

  1. tapez dans le champ en bas view.encoding() et espérez le meilleur (j'ai été incapable d'obtenir autre chose que Undefined mais peut-être que vous aurez plus de chance...)

entrez la description de l'image ici

22
répondu Matas Vaitkevicius 2017-09-09 03:09:29

Juste pour ajouter au cas où file = open(filename, encoding="utf8") ne fonctionne pas essayez file = open(filename, errors='ignore')

Tout va bien

3
répondu Declan Nnadozie 2018-06-05 22:03:51