我一直收到这个错误:
<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
args = ('ascii', '\xe2\x9d\xb6 Senn =)', 0, 1, 'ordinal not in range(128)')
encoding = 'ascii'
end = 1
message = ''
object = '\xe2\x9d\xb6 Senn =)'
reason = 'ordinal not in range(128)'
start = 0
使用此代码:
steamFriend = data['response']['players'][i]
n = steamUser(steamFriend['personaname'].encode("utf-8"), steamFriend['steamid'], steamFriend['avatarfull'], steamFriend['profileurl'], steamFriend['personastate'], False)
有些事情需要注意:
steamFriend
是一个JSON对象steamFriend['personaname']
包含一些奇怪的符号(例如❶),而且我不知道如何正确解析这个错误,所以我不会收到错误。 非常感谢任何帮助。
此外,\xe2\x9d\xb6 Senn =)
应该代表❶ Senn =)
,如果有帮助的话。
答案 0 :(得分:1)
没有看到完整的代码,很难说,但似乎steamUser期望ascii输入。如果这是问题所在,您可以通过以下方式解决:
streamFriend['personaname'].encode("ascii", errors="ignore")
或
streamFriend['personaname'].encode("ascii", errors="replace")
显然你会在这个过程中丢失unicode字符。
答案 1 :(得分:1)
如果在n=...
行上发生引用错误,则意味着steamFriend['personaname']
是字节字符串,而不是Unicode字符串。
因此当你问.encode
时,Python必须 de 将字符串编码为Unicode才能 en 将其编码回字节。使用默认编码(即ASCII)进行隐式解码,因为字节字符串不仅包含ASCII,否则会出现故障。
你确定你没有意思这样做:
steamFriend['personaname'].decode("utf-8")
de 使用UTF-8对字节串'\xe2\x9d\xb6 Senn =)'
进行编码会得到Unicode字符串u'\u2776 Senn =)'
,其中U + 2776 =❶所以看起来更像是你正在追求。
(但是,正常情况下,JSON字符串显式是Unicode,因此不清楚从哪里获取字节字符串。如何加载JSON内容?)