web-dev-qa-db-fra.com

Gestion des erreurs Unicode avec Python 3 readlines ()

Je continue à recevoir cette erreur lors de la lecture d'un fichier texte. Est-il possible de le gérer/l'ignorer et de continuer?

UnicodeEncodeError: le codec ‘charmap’ ne peut pas décoder l’octet 0x81 en position 7827: les mappages de caractères sont indéfinis.

23
Bob

Dans Python 3, passez une valeur errors= Appropriée (telle que errors=ignore Ou errors=replace) Lors de la création de votre objet fichier (en supposant qu'il soit une sous-classe de io.TextIOWrapper - et si ce n'est pas le cas, envisagez de l'envelopper dans une seule!); envisagez également de passer un encodage plus probable que charmap (lorsque vous n'êtes pas sûr, utf-8 Est toujours un bon point de départ).

Par exemple:

f = open('misc-notes.txt', encoding='utf-8', errors='ignore')

Dans Python 2, l'opération read() renvoie simplement des octets; l'astuce consiste alors à les décoder pour les insérer dans une chaîne (si vous le souhaitez, en fait, vous voulez des caractères par opposition aux octets). Si vous n'avez pas une meilleure estimation de leur véritable encodage:

your_string.decode('utf-8', 'replace')

... pour remplacer les caractères non gérés, ou

your_string.decode('utf-8', 'ignore')

de simplement les ignorer.

Cela dit, il serait préférable de trouver et d'utiliser leur encodage réel (plutôt que de deviner utf-8).

47
Charles Duffy

Vous devez ouvrir le fichier avec un codec pour vous assurer que le fichier est interprété comme UTF8.

 importer des codecs 
 fd = codecs.open (nom de fichier, 'r', encoding = 'utf-8') 
 data = fd.read () 
1
optixx