我从webapp2收到包含unicode字符的GET参数,然后使用它来执行NDB查询时收到UnicodeDecodeError。我在处理程序中的参数上手动运行unicode()时收到相同的错误消息,因此在webapp2的URL路由中似乎存在问题或者我错过了某些内容。最好在传递给处理程序之前将所有GET参数转换为unicode,这样我就不需要在所有处理程序中进行手动转换。我实际上认为它在之前的版本中有用。
完整的错误消息为:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
GET参数包含以下字符串: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以获取有关如何自动解码这些参数的解决方案。
感谢。
答案 0 :(得分:1)
看看Nick Johnson的这篇文章:http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python