2012-07-07 16 views
5

Estoy trabajando google appengine python 2.5.UnicodeDecodeError: el códec 'ascii' no puede decodificar el byte 0xc3 en la posición 0: ordinal no en el rango (128)

estoy experimentando unicodedecoderror el siguiente código porque miUsuario nombre ha siguiente valor

userName  = unicode(userName).encode('utf-8') # äºï¼égãwmj is value in this variable 

userName  = unicode(userName).encode('utf-8') 
strData = '{\"Sid\" :1, \"Oppid\" :%s, \"Aid\" :%s, \"EC\" :\"%s\", \"Name\" :\%s"' % (enemyID, userID, userEmpCode,userName) 


    params = {'deviceToken' : oDeviceToken, 
       'message'  : strMessage, 
       'CertificateId' : certificateId, 
       'Data'   : strData 
      } 


result = urlfetch.fetch(url = url, 
      payload = urllib.urlencode(params), 
      method = urlfetch.POST, 
      headers = {"Authorization" : authString}, 
      deadline = 30 
      ) 

que estoy haciendo los siguientes pasos en el nombre de usuario para codificar en UTF-8 para que pudiera enviarlo como carga útil.

username = unicode(username).encode(utf-8) 

Creo que el error se produce cuando llamo urllib.urlencode(params)

favor guían lo que va mal .. o puede hacer ..

y cuál debería ser la estrategia definitiva para hacer frente a cadena Unicode en appengine Python ..

he probado diferentes soluciones de lectura diferentes hilos .. pero aún no funcionaba

+0

favor proporcionar una StackTrace. Y tal vez intente producir un ejemplo de trabajo mínimo que no use variables definidas en otra parte. – oxc

Respuesta

7

yo Parece que el problema es que llama al unicode(userName) sin una codificación en su cadena ya codificada, por lo que "por defecto es la codificación de cadena predeterminada actual", que parece ser ascii en su caso.

Es probable que no deba llamar al unicode en cualquier caso, si sabe que es un valor Unicode, ya está bien, si no, llame al .decode con la codificación correcta.
Si no está seguro, pruebe usando isinstance ya que intentar decodificar un valor Unicode dará como resultado otro error.

1

Tuve un problema similar al portar código de Python 3 de Ubuntu Linux 14.04 a FreeBSD 10.3. El último sistema parece usar ASCII por defecto en lugar de UTF-8 al abrir archivos con Python 3.4.4.

Especificación encoding='utf-8' con el comando archivo open resuelto mi problema:

open('filepath', encoding='utf-8') 
Cuestiones relacionadas