2012-10-28 23 views
0

從webapp2接收到包含unicode字符的GET參數,然後使用它執行NDB查詢時,我收到UnicodeDecodeError。手動在處理程序中的參數上運行unicode()時會出現相同的錯誤消息,因此在webapp2的URL路由中似乎存在問題,或者我錯過了某些內容。最好所有的GET參數在被傳入處理程序之前都應該轉換爲unicode,所以我不需要在所有處理程序中進行手動轉換。我實際上認爲它在早期版本中是有效的。來自webapp2中GET參數的UnicodeDecodeError

完整的錯誤信息閱讀:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

一開始參數包含以下字符串:göteborg。當我在它上面引發Exception時看起來很好,但當我(或NDB)使用unicode()時,它給我一個錯誤。

編輯:

在NDB,它失敗在下面的代碼:File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\datastore_types.py", line 1562, in PackString pbvalue.set_stringvalue(unicode(value).encode('utf-8'))

編輯2:

後來我才發現,我的問題是實際上沒有用GET參數,但處理程序的get()方法接收的URL的路由部分作爲關鍵字參數。查看this follow-up question瞭解如何自動解碼這些參數。

謝謝。

回答

1

看一看這篇文章從尼克·約翰遜:http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python

+0

感謝您的鏈接,我得到了它的最終通過對GET參數.decode(「UTF-8」)現在的工作。然而,我仍然困惑爲什麼這不是由webapp2在路由期間自動完成的。 – Aneon

+0

Webapp2通過參數。這是一個Python 2.x特性/問題,而不是webapp2問題。 – voscausa

+0

但webapp2肯定有自動解碼它們的潛力,所以它看起來像一個設計決定不會。但我想不出有什麼理由不這樣做,除非是性能,儘管解碼應該幾乎沒有影響。 – Aneon