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é

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top