UnicodeDecodeError: 'ascii'编解码器无法解码位置0的字节0xc3:该值不在128的范围内。

5

我正在使用谷歌应用引擎Python 2.5进行工作。

由于我的用户名具有以下值,因此我在以下代码中遇到了UnicodeDecodeError:

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字符串的最终策略应是什么。

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


请提供堆栈跟踪。如果可能,请尝试生成一个最小的工作示例,不要使用其他地方定义的变量。 - oxc
2个回答

7
您的问题似乎是在已经编码的字符串上调用unicode(userName)时没有指定编码,因此它会“默认为当前默认字符串编码”,在您的情况下似乎是ascii
无论如何,如果您知道它是一个Unicode值,就不应该调用unicode,因为您已经很好了;如果不确定,请使用正确的编码调用.decode。如果不确定,请使用isinstance进行测试,因为尝试对Unicode值进行解码将导致另一个错误。

2

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接