2012-07-07 66 views
5

我正在使用谷歌appengine python 2.5。UnicodeDecodeError:'ascii'編解碼器無法解碼位置0中的字節0xc3:序號不在範圍內(128)

我在下面的代碼經歷unicodedecoderror因爲myuser的名字下面的值

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上unicode字符串的最終策略蟒蛇..

我已經嘗試了不同的解決方案,閱讀不同的線程..但仍然沒有工作

+0

請提供一個堆棧跟蹤。也許嘗試產生一個不使用其他地方定義的變量的最小工作示例。 – oxc 2012-07-07 19:14:17

回答

7

呦你的問題似乎是,你打電話給unicode(userName)沒有編碼已經編碼的字符串,所以它「默認爲當前的默認字符串編碼」,這似乎是ascii你的情況。

如果你知道這是一個unicode值,你可能不應該打電話給unicode,如果沒有的話,你已經很好了,用正確的編碼調用.decode
如果您不確定,請使用isinstance進行測試,因爲嘗試解碼unicode值會導致另一個錯誤。

1

將Ubuntu Linux 14.04的Python 3代碼移植到FreeBSD 10.3時,我遇到了類似的問題。當使用Python 3.4.4打開文件時,後一個系統似乎默認使用ASCII而不是UTF-8。

與文件open命令中指定encoding='utf-8'解決我的問題:

open('filepath', encoding='utf-8') 
相關問題