web-dev-qa-db-fra.com

UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xe7 en position 0: l'ordinal n'est pas dans la plage (128)

J'ai des problèmes pour encoder des caractères dans utf-8. J'utilise Django, et je reçois cette erreur lorsque j'ai essayé d'envoyer une notification Android avec du texte non brut. J'ai essayé de trouver où la source de l'erreur et j'ai réussi à comprendre que la source de l'erreur ne se trouve pas dans mon projet.

Dans python Shell, je tape:

'ç'.encode('utf8')

et je reçois cette erreur:

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)

J'obtiens les mêmes erreurs avec:

'á'.encode('utf-8')
unicode('ç')
'ç'.encode('utf-8','ignore')

Je reçois également des erreurs avec smart_text, force_text et smart_bytes.

Est-ce un problème avec Python, mon système d'exploitation ou autre chose?

J'exécute Python 2.6.6 sur une version 4.4.7-3 de Red Hat

16
lluisu

Vous essayez d'encoder/décoder des chaînes, pas des chaînes Unicode. Les déclarations suivantes fonctionnent:

u'ç'.encode('utf8')
u'á'.encode('utf-8')
unicode(u'ç')
u'ç'.encode('utf-8','ignore')
21
Simeon Visser

Utilisation u'...', sans le préfixe u c'est une chaîne d'octets pas une chaîne unicode .:

>>> u'ç'.encode('utf8')
'\xc3\xa7'
3
Ashwini Chaudhary