UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xc3:序数不在范围内(128)

时间:2012-07-07 19:00:03

标签: python google-app-engine unicode decode

我正在使用google appengine python 2.5。

我遇到以下代码的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 python上处理unicode字符串的最终策略..

我尝试了不同的解决方案来阅读不同的线程..但仍然无法正常工作

2 个答案:

答案 0 :(得分:7)

你的问题似乎是你在没有编码已经编码的字符串的情况下调用unicode(userName),所以它“默认为当前的默认字符串编码”,这似乎是{{1}在你的情况下。

你可能不应该在任何情况下调用ascii,如果你知道它是unicode值,那么你已经没事了,如果没有,请用正确的编码调用unicode
如果您不确定,请使用.decode进行测试,因为尝试解码unicode值会导致另一个错误。

答案 1 :(得分:1)

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

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

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