2010-06-22 4 views
3

Essayer de stocker utf-8 dans datastore et obtenir l'erreur:Essayer de stocker utf-8 données datastore obtenir UnicodeEncodeError

Traceback (most recent call last): 
    File "/sinfo/google_appengine/google/appengine/ext/webapp/__init__.py", line 511, in __call__ 
    handler.get(*groups) 
    File "/sinfo/siteinfo/siteinfo.py", line 1911, in get 
    seoEntity.put() 
    File "/sinfo/google_appengine/google/appengine/ext/db/__init__.py", line 833, in put 
    return datastore.Put(self._entity, rpc=rpc) 
    File "/sinfo/google_appengine/google/appengine/api/datastore.py", line 275, in Put 
    req.entity_list().extend([e._ToPb() for e in entities]) 
    File "/sinfo/google_appengine/google/appengine/api/datastore.py", line 680, in _ToPb 
    properties = datastore_types.ToPropertyPb(name, values) 
    File "/sinfo/google_appengine/google/appengine/api/datastore_types.py", line 1499, in ToPropertyPb 
    pbvalue = pack_prop(name, v, pb.mutable_value()) 
    File "/sinfo/google_appengine/google/appengine/api/datastore_types.py", line 1322, in PackString 
    pbvalue.set_stringvalue(unicode(value).encode('utf-8')) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) 

Comment puis-je résoudre ce problème? Les données sont déjà codées en utf-8 et quand je l'entre dans le magasin de données, il utilise le codec ASCII et échoue?

+1

Avez-vous pu comprendre cela? J'ai le même problème! – mahmoud

Répondre

6

J'utilise aide suivante dans mes projets

def force_utf8(string): 
    if type(string) == str: 
     return string 
    return string.encode('utf-8') 

Utilisez-le pour échapper à toutes vos données unicode avant de passer à GAE. Aussi, vous pouvez trouver utile l'extrait suivant:

def force_unicode(string): 
    if type(string) == unicode: 
     return string 
    return string.decode('utf-8') 
+1

Je cherche à faire la même chose. J'ai un nom d'affectation de moteur d'application = '全部'. La chaîne est encodée en utf-8. Essayé force_utf8() mais toujours eu la même erreur "codec" ascii "ne peut pas décoder l'octet" – sohil

Questions connexes