Unicode en Python sur Google App Engine
-
12-10-2019 - |
Question
Je dois faire une demande POST dans laquelle les données peuvent être non-ascii (caractères chinois, japonais). Je dois convertir l'entrée en unicode et encode avec utf-8. Voici comment je l'ai fait:
foo = unicode(self.request.get('foo'), 'utf-8') #convert to unicode
foo = foo.encode('utf-8') #encode with utf-8
data = {'foo': foo}
payload = urllib.urlencode(data)
Cependant, je continue à obtenir cette erreur dans mes journaux:
TypeError: Unicode décodage est pas supporté
La solution
Unicode ne peut pas être décodé car il est déjà unicode.
Essayez ceci:
if isinstance(var, str):
var = unicode(var, 'utf-8')
else:
var = unicode(var)
Autres conseils
Ok certains commentaires:
foo = unicode(self.request.get('foo'), 'utf-8') #convert to unicode
Ne pas appeler « convertir ». Appelez-le « décodage », il rend plus clair.
foo = foo.encode('utf-8') #encode with utf-8
Mais pourquoi? Vous venez décodé il de UTF8, pourquoi êtes-vous encodez en arrière? Vous pouvez tout aussi bien faire:
foo = self.request.get('foo')
C'est équivalent au-dessus de deux lignes.
Pour réduire votre confusion sur Unicode, lisez ceci: http://www.joelonsoftware.com/ articles / Unicode.html