在Python/AppEngine中传递GET数据时的UnicodeDecodeError

0 投票
2 回答
1654 浏览
提问于 2025-04-16 03:18

这个问题看起来很基础,但我一直找不到答案。

我想从一个网址读取数据,比如从查询字符串中获取数据。我在用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()

在我的测试环境中测试时,网址http://localhost/?data=test返回了下面这个错误信息。如果没有查询字符串,它就像预期的那样显示一个空白页面。

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

我哪里做错了,应该怎么做呢?

2 个回答

2

看看这篇博客,里面讲了如何在Python中正确处理unicode。简单来说,你在尝试把一个字节字符串(隐式地)解码成ASCII格式,但里面有一个字节在这种编码下是不合法的。你的字符串很可能是用UTF-8编码的。

2

你可能在尝试打印一个用ASCII编码的字符串,但这个字符串实际上包含的是其他字符集的数据。这种情况可能会发生在使用拉丁-1编码的数据时。你可以尝试将输入转换为Unicode,方法是使用

unicoded = unicode(non_unicode_string, source_encoding)

这里的source_encoding可以是像'cp1252''iso-8859-1'这样的编码,然后把它发送到输出。

你可以看看这个指南。想了解Python支持的编码列表,可以查看这里

撰写回答