J'obtiens une erreur avec le motif suivant:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 155: ordinal not in range(128)
Je ne sais pas ce que u'\ufeff'
c'est, cela apparaît lorsque je fais du web scraping. Comment puis-je remédier à la situation? La .replace()
méthode string ne fonctionne pas dessus.
Réponses:
Le caractère Unicode
U+FEFF
est la marque d'ordre d'octet, ou BOM, et est utilisé pour faire la différence entre le codage UTF-16 gros et petit boutiste. Si vous décodez la page Web en utilisant le bon codec, Python la supprimera pour vous. Exemples:Notez qu'il
EF BB BF
s'agit d'une nomenclature encodée en UTF-8. Il n'est pas requis pour UTF-8, mais sert uniquement de signature (généralement sous Windows).Production:
Notez que le
utf-16
codec nécessite que la nomenclature soit présente, ou Python ne saura pas si les données sont big ou little endian.la source
J'ai rencontré cela sur Python 3 et j'ai trouvé cette question (et cette solution ). Lors de l'ouverture d'un fichier, Python 3 prend en charge le mot-clé encoding pour gérer automatiquement l'encodage.
Sans elle, la nomenclature est incluse dans le résultat de lecture:
En donnant le bon codage, la nomenclature est omise dans le résultat:
Juste mes 2 cents.
la source
Ce caractère est la nomenclature ou "Byte Order Mark". Il est généralement reçu comme les premiers octets d'un fichier, vous indiquant comment interpréter le codage du reste des données. Vous pouvez simplement supprimer le personnage pour continuer. Bien que, puisque l'erreur indique que vous essayez de convertir en «ascii», vous devriez probablement choisir un autre encodage pour tout ce que vous essayez de faire.
la source
Le contenu que vous grattez est codé en unicode plutôt qu'en texte ascii, et vous obtenez un caractère qui ne se convertit pas en ascii. La bonne «traduction» dépend de ce que la page Web d'origine pensait. La page Unicode de Python donne un aperçu de son fonctionnement.
Essayez-vous d'imprimer le résultat ou de le coller dans un fichier? L'erreur suggère qu'il s'agit d' écrire les données à l'origine du problème, pas de les lire. Cette question est un bon endroit pour rechercher les correctifs.
la source
Voici basé sur la réponse de Mark Tolonen. La chaîne comprenait différentes langues du mot «test» séparées par «|», vous pouvez donc voir la différence.
Voici un essai:
Il vaut la peine de savoir que seuls les deux
utf-8-sig
etutf-16
récupérer la chaîne d'origine après les deuxencode
etdecode
.la source
Ce problème survient essentiellement lorsque vous enregistrez votre code python dans un encodage UTF-8 ou UTF-16 car python ajoute automatiquement un caractère spécial au début du code (qui n'est pas affiché par les éditeurs de texte) pour identifier le format d'encodage. Mais, lorsque vous essayez d'exécuter le code, cela vous donne l'erreur de syntaxe à la ligne 1, c'est-à-dire le début du code car le compilateur python comprend le codage ASCII . lorsque vous affichez le code du fichier en utilisant la fonction read () , vous pouvez voir au début du code retourné '\ ufeff' est affiché. La solution la plus simple à ce problème consiste simplement à changer le codage en codage ASCII(pour cela, vous pouvez copier votre code dans un bloc-notes et l'enregistrer. Rappelez-vous! choisissez l'encodage ASCII ... J'espère que cela vous aidera.
la source