2014-12-11 154 views
0

我不断收到此错误:exceptions.UnicodeDecodeError - 'ASCII' 编解码器不能解码字节

<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对象
  • 我只有时会得到这个错误,因为beca使用steamFriend['personaname']包含一些奇怪的符号(例如❶),并且我不知道如何正确解析,因此我不会收到错误。

任何帮助,非常感谢。 另外,\xe2\x9d\xb6 Senn =)应该代表❶ Senn =),如果有帮助。

+0

在我的网页抓取曾经有过类似的错误。该解决方案首先将字符串解码为ascii,然后编码为utf-8。或者也许相反... – 2014-12-11 04:31:10

回答

0

没有看到完整的代码很难说,但steamUser似乎希望ascii输入。如果是这样的问题,你可以解决它:

streamFriend['personaname'].encode("ascii", errors="ignore") 

streamFriend['personaname'].encode("ascii", errors="replace") 

很明显,你会在这个过程中失去Unicode字符。

+0

我不想丢失Unicode字符,那么有什么选择? – 2014-12-11 14:44:55

+0

如果steamUser函数需要ascii数据,您可能没有其他选择,除了可能使用errors =“xmlcharrefreplace”将unicode字符转换为ascii xml表示形式。然后,您可以使用https://stackoverflow.com/questions/17341601/convert-string-from-xmlcharrefreplace-back-to-utf-8在需要时将其转换回utf8。一个更简单,更清洁的解决方案,如果你有完整的代码库的控制权,将修复steamUser函数,以便它可以接受unicode。 – 2014-12-12 16:23:25

1

如果引用的错误发生在n=...行上,暗示steamFriend['personaname']是一个字节字符串,而不是Unicode字符串。

因此,当你问到.encode它,Python有到串码为Unicode,以便能够EN代码回字节。隐式解码使用默认编码,即ASCII,因为字节串不仅包含ASCII,您将失败。

你确定你不是故意这样做:

steamFriend['personaname'].decode("utf-8") 

使用UTF-8会给你Unicode字符串u'\u2776 Senn =)',其中U + 2776 =❶按照使编码字节串'\xe2\x9d\xb6 Senn =)'看起来更像你以后的样子。

(通常情况下,然而,JSON字符串是明确的Unicode,因此目前还不清楚,你会得到了。你是如何加载JSON内容的字节串?)

+0

所以如果我解码它,那么我得到这个错误':'ascii'编解码器无法对位置2954中的字符u'\ u2776'进行编码:序号不在范围(128)内。现在我该怎么做?我是否必须编码回ascii才能获得? – 2014-12-11 11:52:25

+0

我拿出'.encode(“utf-8”)'部分,因为你是对的--JSON字符串已经是unicode-它的值是'u'。Senn ='' – 2014-12-11 12:36:17

相关问题