UnicodeEncodeErreur :Le codec 'ascii' ne peut pas encoder les caractères à cause d'un problème de base de données
-
21-12-2019 - |
Question
J'ai un champ à extraire de la base de données qui contient une chaîne avec cette partie et en obtenant ceci, j'obtiens une erreur :
"UnicodeEncodeErreur :Le codec 'ascii' ne peut pas encoder les caractères en position 12-15 :ordinal hors de portée (128)"
J'ai recherché cette erreur, et d'autres personnes avaient des problèmes à cause d'Unicodes qui commencent quelque chose comme ceci u'\xa0
, etc.Mais dans mon cas, je pense que c'est dû à des caractères spéciaux.Je ne peux pas apporter de modifications à la base de données car elle n'est pas sous mon accès.Je peux simplement y accéder.
Le code est ici :(en fait, son appel à une URL externe)
req = urllib2.Request(url)
req.add_header("Content-type", "application/json")
res = urllib2.urlopen(req,timeout = 50) #50 secs timeout
clientid = res.read()
result = json.loads(clientid)
Ensuite, j'utilise la variable result pour obtenir la chaîne mentionnée ci-dessus et j'obtiens une erreur sur cette ligne :
updateString +="name='"+str(result['product_name'])+"', "
La solution
Vous devez trouver le codage utilisé pour vos données avant de les insérer dans la base de données.Supposons qu'il s'agisse d'UTF-8 puisque c'est le plus courant.
Dans ce cas, vous souhaiterez décoder UTF-8 au lieu du décodage ascii.Vous n'avez fourni aucun code, donc je suppose que vous l'avez "data".decode()
.Essayer "data".decode("utf-8")
, et si vos données ont été codées avec cet encodage, cela fonctionnera.
Autres conseils
Il me semble donc que la chaîne était déjà Unicode à l'époque.Alors supprimez str()
et unicode
fonctions sur cette ligne.