Le message d'erreur vous indique exactement ce qui ne va pas. L'interpréteur Python doit connaître le codage du caractère non ASCII.
Si vous souhaitez retourner U + 00A3, vous pouvez dire
return u'\u00a3'
qui représente ce caractère en ASCII pur au moyen d'une séquence d'échappement Unicode. Si vous souhaitez renvoyer une chaîne d'octets contenant l'octet littéral 0xA3, c'est
return b'\xa3'
(où en Python 2 le b
est implicite; mais explicite vaut mieux qu'implicite).
Le PEP lié dans le message d'erreur vous indique exactement comment dire à Python "ce fichier n'est pas pur ASCII; voici l'encodage que j'utilise". Si le codage est UTF-8, ce serait
# coding=utf-8
ou compatible Emacs
# -*- encoding: utf-8 -*-
Si vous ne savez pas quel encodage votre éditeur utilise pour enregistrer ce fichier, examinez-le avec quelque chose comme un éditeur hexadécimal et quelques recherches sur Google. Le débordement de pileEncodage de caractèreLa balise a une page d'informations sur la balise avec plus d'informations et quelques conseils de dépannage.
En tant de mots, en dehors de la plage ASCII 7 bits (0x00-0x7F), Python ne peut pas et ne doit pas deviner quelle chaîne représente une séquence d'octets. https://tripleee.github.io/8bit#a3 montre 21 interprétations possibles pour l'octet 0xA3 et c'est seulement à partir des encodages 8 bits hérités; mais il pourrait également très bien être le premier octet d'un codage multi-octets. Mais en fait, je suppose que vous utilisez réellement Latin-1, vous devriez donc avoir
# coding: latin-1
comme première ou deuxième ligne de votre fichier source. Quoi qu'il en soit, sans savoir quel caractère l'octet est censé représenter, un humain ne pourrait pas non plus le deviner.
Une mise en garde: coding: latin-1
supprimera définitivement le message d'erreur (car il n'y a pas de séquences d'octets qui ne sont pas techniquement autorisées dans cet encodage), mais pourrait produire complètement le mauvais résultat lorsque le code est interprété si l'encodage réel est autre chose. Vous devez vraiment connaître l'encodage du fichier en toute certitude lorsque vous déclarez l'encodage.