Je lis et analyse un fichier XML Amazon et tandis que le fichier XML affiche 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 vient du fait que le fichier XML est en UTF-8, mais Python veut le gérer comme un caractère encodé ASCII. Existe-t-il un moyen simple de faire disparaître l'erreur et de faire imprimer le XML par mon programme au fur et à mesure?
unicode()
?Réponses:
Probablement, votre problème est que vous l'avez bien analysé, et maintenant vous essayez d'imprimer le contenu du XML et vous ne pouvez pas parce qu'il y a des caractères Unicode étrangers. Essayez d'abord d'encoder votre chaîne Unicode en ascii:
la partie «ignorer» lui dira de simplement sauter ces caractères. À partir de la documentation Python:
Vous voudrez peut-être lire cet article: http://www.joelonsoftware.com/articles/Unicode.html , que j'ai trouvé très utile comme tutoriel de base sur ce qui se passe. Après la lecture, vous cesserez de vous sentir comme si vous deviez juste quelles commandes utiliser (ou du moins cela m'est arrivé).
la source
.encode('ascii', 'ignore')
perd des données inutilement même si l'environnement d'OP peut prendre en charge les caractères non-ascii (la plupart des cas)Une meilleure solution:
Si vous souhaitez en savoir plus sur les raisons:
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
la source
u'\u2019
est déjà Unicode.Ne codez pas en dur le codage des caractères de votre environnement dans votre script; imprimer le texte Unicode directement à la place:
Si votre sortie est redirigée vers un fichier (ou un tube); vous pouvez utiliser
PYTHONIOENCODING
envvar, pour spécifier le codage des caractères:Dans le cas contraire,
python your_script.py
devrait fonctionner comme cela est - vos paramètres régionaux sont utilisés pour coder le texte (à l' enregistrement POSIX:LC_ALL
,LC_CTYPE
,LANG
envvars - ensembleLANG
à un lieu utf-8 si nécessaire).Pour imprimer Unicode sous Windows, consultez cette réponse qui montre comment imprimer Unicode sur la console Windows, dans un fichier ou en utilisant IDLE .
la source
Excellent article: http://www.carlosble.com/2010/12/understanding-python-and-unicode/
la source
Vous pouvez utiliser quelque chose du formulaire
qui convertira une chaîne d'octets encodée en UTF-8 en une chaîne Python Unicode. Mais la procédure exacte à utiliser dépend exactement de la manière dont vous chargez et analysez le fichier XML, par exemple si vous n'accédez jamais directement à la chaîne XML, vous devrez peut-être utiliser un objet décodeur du
codecs
module .la source
'...'.encode('utf-8')
J'ai écrit ce qui suit pour corriger les citations non-ascii nuisibles et forcer la conversion en quelque chose utilisable.
la source
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
unidecode
package 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 le
u.encode('ascii', 'ignore')
pour une chaîne donnéeu
, 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 souhaitez toujours avoir une lisibilité humaine.Wirawan
la source
Essayez d'ajouter la ligne suivante en haut de votre script python.
la source
Python 3.5, 2018
Si vous ne connaissez pas le codage mais que l'analyseur Unicode a des problèmes, vous pouvez ouvrir le fichier dans
Notepad++
et dans la barre supérieure, sélectionnezEncoding->Convert to ANSI
. Ensuite, vous pouvez écrire votre python comme çala source