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

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

我在谷歌Appenginepython2.5工作。

我在以下代码上遇到unicodedecoderror,因为myuser name具有以下值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
userName     = unicode(userName).encode('utf-8') # ?o??é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,以便将其作为有效负载发送。

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

我相信当我调用urllib.urlencode(params)时会发生错误。

请指引出了什么问题。或者你可以…

在appengine python上处理unicode字符串的最终策略是什么。

我尝试过不同的解决方案,阅读不同的主题。但还是没用


您的问题似乎是您在调用unicode(userName),但对已经编码的字符串没有编码,所以它"默认为当前默认的字符串编码",在您的情况下,它似乎是ascii

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


我在将python 3代码从UbuntuLinux14.04移植到FreeBsd10.3时遇到了类似的问题。在用Python3.4.4打开文件时,后一个系统在默认情况下似乎使用ASCII而不是UTF-8。

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

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