Bottle - 获取具有 unicode 字符的查询项在浏览器中有效,但在 webtest 中失败

Bottle - get query item with unicode characters works in browser, fails with webtest

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

site = request.query.site

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

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

站点将等于 füa

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

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

现在查看站点内将是一个空字符串:

site = request.query.site

有人知道这里发生了什么吗?

这让我很头疼,所以我发布这个是为了其他人的利益。 解决方案的关键是我将 URL 按原样从浏览器复制到我的测试代码。

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

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

quoted urls UnicodeDecodeError

为了解决这个问题,我只是将测试代码中的 URL 更改为编码 URL:

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

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

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