8
votes

Comment assainir complètement une chaîne de caractères illégaux dans Python?

J'ai une fonctionnalité de mon programme où l'utilisateur peut télécharger un fichier CSV, que mon programme passe et utilise comme entrée. J'ai un utilisateur qui se plaint d'un problème où son entrée vomit une erreur. L'erreur est causée par un caractère illégal qui est codé mal. Les caractères sont ci-dessous:

UnicodeDecodeError at /chris/import.html
('ascii', 'blah \xa0 BLAH', 14, 15, 'ordinal not in range(128)')


1 commentaires

Au fait, la raison pour laquelle vous «ne peut rien faire», c'est probablement parce que toutes les choses que vous avez essayées impliquaient de taper des expressions à l'invite. L'interprète interactif affiche le résultat de chaque expression en appelant REC () dessus. Parfois, cela conduit à décoder des erreurs car votre console ne gère pas Unicode (ou d'autres raisons?). Si vous obtenez une telle chose, essayez d'assigner à un nom factice (par exemple "x = foo" au lieu de "foo") et qui ne montrera généralement pas une exception. Ensuite, vous savez que l'exception est faux.


4 Réponses :


10
votes

Vous pouvez passer, "ignorer" pour sauter des caractères non valides dans .encode / .decode Comme "illégal" .Decode ("utf8", "ignorer") xxx


0 commentaires

3
votes

Déclarez le codage sur la deuxième ligne de votre script. Il doit vraiment être deuxième. Comme xxx

Cela pourrait suffire à résoudre votre problème tout seul. Sinon, voir str.encode ('utf-8') et str.decode ('utf-8').


0 commentaires

1
votes

Le seul moyen de le faire (au moins dans Python2) consiste à utiliser UNICODEDATA.NORMALIZE:

unicodedata.normalize('NFKD', text).encode('utf-8', 'ignore')


0 commentaires

2
votes

Vous pouvez également utiliser: xxx

pris à partir de https://wiki.python.org/moin/purshex%20python%20one-liners

** PS, sur le site Web, il est désigné d'utiliser Python, mais j'ai testé python3 et ça marche juste bien


0 commentaires