UnicodeEncodeError lors de l'écriture d'un fichier
Je suis en train d'écrire des chaînes de caractères dans un fichier (les cordes m'ont été données par l'analyseur HTML BeautifulSoup).
J'pouvez utiliser le bouton "imprimer" pour les afficher, mais lorsque j'utilise le fichier.write (), j'obtiens l'erreur suivante:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 6: ordinal not in range(128)
Comment puis-je analyser ce?
source d'informationauteur Rory
Vous devez vous connecter pour publier un commentaire.
Cette erreur se produit lorsque vous passez une chaîne Unicode contenant des caractères non anglais (caractères Unicode au-delà de 128) à quelque chose qui s'attend à un ASCII bytestring. Le codage par défaut pour un Python bytestring est ASCII", qui traite exactement 128 (en anglais) caractères". C'est pourquoi, en essayant de convertir des caractères Unicode-delà de 128 produit l'erreur.
L'unicode()
constructeur à la signature unicode(string[, le codage, les erreurs]). Tous les arguments doivent être de 8 chaînes de bits.
Le premier argument est converti en Unicode à l'aide de l'encodage spécifié; si vous partez hors de l'encodage de l'argumentation, le codage ASCII est utilisé pour la conversionautant de personnages de plus de 127 seront traités comme des erreurs
par exemple
ou
encoder à l'aide de latin-1
Oui, à environ 99,9% de vétéran Python utilisateurs ont vu avant.
Si je tape 'python unicode" dans Google, j'obtiens environ 14 millions de résultats; la première est http://docs.python.org/howto/unicode.html officiel doc qui décrit l'ensemble de la situation dans les plus petits détails; et la quatrième est http://farmdev.com/talks/unicode/ qui est plus pratique, qui sera à peu près la cuillère-vous nourrir une réponse, et aussi assurez-vous de comprendre ce qu'il se passe.
Vous avez vraiment besoin de lire et de comprendre ces sortes de vues d'ensemble, aussi longtemps qu'elles semblent être. Il n'y a vraiment pas de tout faire autour d'elle. Le texte est difficile. Il n'y a pas une telle chose comme "texte brut", il n'est pas un fac-similé raisonnable pendant des années, et il n'a jamais vraiment été, même si nous avons passé des décennies à faire semblant, il y avait. Mais Unicode est un standard.
Vous devriez également lire http://www.joelonsoftware.com/articles/Unicode.html .
La réponse à votre question est "d'utiliser des codecs". Le appeded code montre aussi quelques gettext magie, FWIW. http://wiki.wxpython.org/Internationalization
En dépit de Google étant plein de hits sur ce problème, je l'ai trouvé plutôt difficile de trouver cette solution simple (il est en fait dans le Python docs sur l'Unicode, mais plutôt enterré).
Donc ... HTH...
GaJ