2010-08-25 23 views
0

這聽起來像是一個非常基本的問題,但我一直無法找到答案。在Python/AppEngine中傳遞GET數據時的UnicodeDecodeError

我想從一個url讀取數據,例如從querystring中獲取數據。我在Python中使用webapp框架。我嘗試了下面的代碼,但是因爲我在Python/appengine上有一個完整的初學者,所以我肯定做錯了什麼。

class MainPage(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write(self.request.get('data')) 

application = webapp.WSGIApplication([('/', MainPage),('/search', Search),('/next', Next)],debug=False) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

當在我的測試環境中測試,該URL http://localhost/?data=test只是返回低於此錯誤消息。沒有查詢字符串,它只是按預期顯示一個空白頁面。

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

什麼我做錯了,我該怎麼辦呢?

+0

你的代碼對我來說看起來很好。錯誤來自哪裏?你能包括堆棧跟蹤的其餘部分嗎? – 2010-08-25 21:42:19

+0

對不起,看起來真正的問題不是獲取GET數據的代碼,而是其他的東西。我會編輯我的問題。 – nip3o 2010-08-25 21:54:28

回答

2

您試着例如打印實際包含不同字符集數據的ASCII碼字符串。這可能發生,例如用Latin-1編碼的數據。嘗試使用

unicoded = unicode(non_unicode_string, source_encoding) 

其中source_encoding是像'cp1252''iso-8859-1'等你輸入轉換爲Unicode和發送這個輸出。

看一看this HOWTO。有關Python支持的編碼列表,請參閱this

+0

謝謝!嘗試從urlfetch查詢中寫入結果時發生此錯誤。我無法理解的想法是,爲什麼當我嘗試傳遞一個查詢字符串時發生錯誤,而不是當我沒有? – nip3o 2010-08-25 22:06:26

2

查看this blog post瞭解如何在Python中執行unicode。簡而言之,您試圖將字節字符串(隱式地)解碼爲ASCII,並且它包含在該編解碼器中無效的字節。你的字符串可能是UTF-8。

+0

Unicode字符串[snip]包含不能表示爲unicode的字符?????? – 2011-04-18 11:31:32

+0

-1如果OP試圖將一個Unicode字符串編碼爲ASCII,並且它不符合,他將得到一個Unicode ** En ** codeError - 該OP報告Unicode ** De ** codeError。 – 2011-04-18 12:32:39

+0

@John你是對的 - 修復。儘管如此,投票簡單的錯字看起來有點不必要。 – 2011-04-21 00:55:07