web-dev-qa-db-fra.com

UnicodeDecodeError: le codec 'charmap' ne peut pas décoder l'octet X en position Y: les mappages de caractères sur <non défini>

J'essaie d'obtenir un programme Python 3 pour effectuer quelques manipulations avec un fichier texte contenant des informations. Cependant, lorsque j'essaie de lire le fichier, l'erreur suivante apparaît:

Traceback (appel le plus récent en dernier):
Fichier "SCRIPT LOCATION", ligne NUMBER, dans
text = file.read()
Fichier "C:\Python31\lib\encodings\cp1252.py", ligne 23, en décodage
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: le codec 'charmap' ne peut pas décoder l'octet 0x90 en position 2907500: les mappages de caractères sur <undefined>

417
Eden Crow

Le fichier en question n'utilise pas l'encodage CP1252. C'est en utilisant un autre encodage. Lequel vous devez trouver vous-même. Les plus courants sont Latin-1 et UTF-8. Puisque x9 ne signifie en réalité rien dans Latin-1, UTF-8 (où x9 est un octet de continuation) est plus probable.

Vous spécifiez le codage lorsque vous ouvrez le fichier:

file = open(filename, encoding="utf8")
713
Lennart Regebro

Dans le prolongement de @LennartRegebro, répondez:

Si vous ne savez pas de quel encodage il s'agit et que la solution ci-dessus ne fonctionne pas (ce n'est pas utf8) et que vous vous êtes retrouvé en train de deviner - il existe outils en ligne que vous pourriez utiliser pour identifier ce c'est l'encodage. Ils ne sont pas parfaits mais fonctionnent généralement très bien. Après avoir compris le codage, vous devriez pouvoir utiliser la solution ci-dessus.

EDIT: (Copié du commentaire)

Un éditeur de texte assez populaire Sublime Text dispose d'une commande pour afficher le codage s'il a été défini ...

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

enter image description here

  1. Tapez dans le champ en bas view.encoding() et espérez que tout ira pour le mieux (je ne pouvais rien obtenir d'autre que Undefined mais vous aurez peut-être plus de chance ...)

enter image description here

33
Matas Vaitkevicius

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

30
Declan Nnadozie

Sinon, si vous n'avez pas besoin de décoder le fichier, tel que le télécharger sur un site Web, open(filename, 'rb'). r = lecture, b = binaire

1
Kyle Parisi