瓶子 - 带有unicode字符的查询项目在浏览器中工作,因webtest

时间:2016-11-27 21:33:46

标签: python python-3.x bottle webtest

我在瓶子路线中有以下代码:

site = request.query.site

这在浏览器中运行良好。所以,如果我去网址:

http://myapp.domain/?site=füä

网站将等于füa

尝试使用WebTest模拟此请求,这将导致瓶内编码错误,从而导致站点为空:

res = testapp.get("/?site=füä")

现在在视图网站内部将是一个空字符串:

site = request.query.site

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:3)

这引起了我很多头痛,所以我发布这个是为了别人的利益。 解决方案的关键在于我将URL从浏览器转换为我的测试代码。

res = testapp.get("/?site=füä")

浏览器(在我的情况下是firefox 50,但也是当前的chrome)默默地翻译这些字符,一切都很好。 在阅读了有关瓶子如何处理FormsDict的更多信息后,我确实可以确认问题出在WebTest上。更多的搜索,我发现,有一个长期存在的错误:

quoted urls UnicodeDecodeError

要解决此问题,我只需将测试代码中的网址更改为已编码的网址:

res = testapp.get("/?site=f%C3%BC%C3%A4")

中提琴!问题解决了。现在网站已正确设置为füä。我用了 HTML URL Encoding Reference

经验教训。切勿在测试代码中天真地使用unicode。