2014-12-11 57 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

相關問題