我在瓶子路线中有以下代码:
site = request.query.site
这在浏览器中运行良好。所以,如果我去网址:
http://myapp.domain/?site=füä
网站将等于füa
。
尝试使用WebTest模拟此请求,这将导致瓶内编码错误,从而导致站点为空:
res = testapp.get("/?site=füä")
现在在视图网站内部将是一个空字符串:
site = request.query.site
有谁知道这里发生了什么?
答案 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。