2012-07-07 103 views
5

我正在使用谷歌appengine python 2.5。UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xc3:序号不在范围内(128)

我在下面的代码经历unicodedecoderror因为myuser的名字下面的值

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 
      ) 

我做的用户名以下步骤将其编码成UTF-8,这样我可以把它作为有效载荷。

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

我相信,当我打电话urllib.urlencode(params)

请指导什么错误发生错误..或者你可以..

应该是什么应对AppEngine上unicode字符串的最终策略蟒蛇..

我已经尝试了不同的解决方案,阅读不同的线程..但仍然没有工作

+0

请提供一个堆栈跟踪。也许尝试产生一个不使用其他地方定义的变量的最小工作示例。 – oxc 2012-07-07 19:14:17

回答

7

呦你的问题似乎是,你打电话给unicode(userName)没有编码已经编码的字符串,所以它“默认为当前的默认字符串编码”,这似乎是ascii你的情况。

如果你知道这是一个unicode值,你可能不应该打电话给unicode,如果没有的话,你已经很好了,用正确的编码调用.decode
如果您不确定,请使用isinstance进行测试,因为尝试解码unicode值会导致另一个错误。

1

将Ubuntu Linux 14.04的Python 3代码移植到FreeBSD 10.3时,我遇到了类似的问题。当使用Python 3.4.4打开文件时,后一个系统似乎默认使用ASCII而不是UTF-8。

与文件open命令中指定encoding='utf-8'解决我的问题:

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