112 votes

Python Erreur d'encodage Unicode

Je lis et parsèse un fichier XML Amazon et alors que le fichier XML montre un ', lorsque j'essaie de l'imprimer, j'obtiens l'erreur suivante:

'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128) 

D'après ce que j'ai lu en ligne jusqu'à présent, l'erreur provient du fait que le fichier XML est en UTF-8, mais Python veut le traiter comme un caractère encodé en ASCII. Y a-t-il un moyen simple de faire disparaître l'erreur et de faire en sorte que mon programme imprime le XML tel qu'il le lit?

0 votes

Je venais juste sur SO pour poster cette question. Y a-t-il un moyen facile de nettoyer une chaîne pour unicode() ?

0 votes

Veuillez également consulter cette réponse à une question connexe : « Python UnicodeDecodeError - est-ce que je comprends mal l'encodage ? »

0voto

user5910 Points 9

J'ai écrit ce qui suit pour corriger les citations non-ascii gênantes et forcer la conversion en quelque chose d'utilisable.

unicodeToAsciiMap = {u'\u2019':"'", u'\u2018':"`", }

def unicodeToAscii(inStr):
    try:
        return str(inStr)
    except:
        pass
    outStr = ""
    for i in inStr:
        try:
            outStr = outStr + str(i)
        except:
            if unicodeToAsciiMap.has_key(i):
                outStr = outStr + unicodeToAsciiMap[i]
            else:
                try:
                    print "unicodeToAscii: ajouter à la carte:", i, repr(i), "(encodé en _)"
                except:
                    print "unicodeToAscii: code inconnu (encodé en _)", repr(i)
                outStr = outStr + "_"
    return outStr

0voto

Wirawan Purwanto Points 312

Si vous avez besoin d'imprimer une représentation approximative de la chaîne à l'écran, plutôt que d'ignorer ces caractères non imprimables, veuillez essayer le paquet unidecode ici:

https://pypi.python.org/pypi/Unidecode

L'explication se trouve ici:

https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/

C'est mieux que d'utiliser u.encode('ascii', 'ignore') pour une chaîne donnée u, et peut vous éviter des maux de tête inutiles si la précision des caractères n'est pas ce que vous recherchez, mais que vous voulez quand même une lisibilité humaine.

Wirawan

-1voto

abnvanand Points 150

Essayez d'ajouter la ligne suivante en haut de votre script python.

# _*_ coding:utf-8 _*_

-2voto

Atomar94 Points 35

Python 3.5, 2018

Si vous ne connaissez pas l'encodage mais que le parser Unicode pose problème, vous pouvez ouvrir le fichier dans Notepad++ et dans la barre supérieure sélectionnez Encoding->Convert to ANSI. Ensuite, vous pouvez écrire votre python comme ceci

with open('filepath', 'r', encoding='ANSI') as file:
    for word in file.read().split():
        print(word)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X