Pourquoi cette erreur survient-elle lorsque j'essaie d'imprimer quelque chose dans Putty?
Question
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 38: ordinal not in range(128)
Je télécharge un site Web et en imprime ensuite le contenu ... simple. Dois-je l'encoder d'une manière ou d'une autre?
La solution
Essayez utf-8 pour commencer. Le site Web que vous téléchargez peut avoir un jeu de caractères différent de celui de ANSI et ces caractères supplémentaires ne peuvent pas être imprimés sur la console.
Donc là où vous faites texte d'impression
, faites texte.encode ('utf-8')
à la place.
Autres conseils
Assurez-vous que Putty est configuré pour accepter les données codées UTF-8.
imprimer
sur une sortie standard peut poser problème, car Python ignore souvent le codage de caractères utilisé par le système. Face à cela, Python 2 assume le choix le plus conservateur, US ASCII. Ainsi, lorsque vous essayez d’imprimer une chaîne contenant des caractères non ASCII, tels que la citation intelligente U + 2019 ’
, cette erreur s’affiche.
Dans Python 3, le jeu de caractères par défaut pour sys.stdout.encoding
est UTF-8. Si vous êtes sûr que votre sortie standard (c'est-à-dire PuTTY dans votre cas) doit accepter UTF-8, alors vous pouvez l'encoder explicitement:
print content.encode('UTF-8')