bottle将POST请求转换为unicode
我有一个服务器应用,除了在保存ajax表单时出现问题,其他都正常。如果我用Python脚本保存数据,输入正确的话,返回的数据是unicode格式。但是从JavaScript那边来的数据就奇怪了:在管道中应该只有字节(这是HTTP唯一知道的数据类型),但Bottle框架给我的是str(不是utf-8格式),我无法进行编码或解码来得到正确的值。在JavaScript这边,我尝试用jQuery和form.serialize,其他框架都能正常工作。
@post('/agt/save')
def saveagt():
a = Agent({x: request.forms.get(x) for x in request.forms})
print(a.nume, a.nume.encode())
return {'ret': ags.add(a)}
... 比如一个名字“țânțar”变成了“ÈânÈar”。
这可能是个简单的问题,但我觉得我还没喝够咖啡。
2 个回答
0
使用
request.forms.getunicode('some_form_field_name')
作为简写,如果你想避免字符转换成latin-1编码。
1
如果有人好奇的话,Bottle这个框架在处理网址时有点问题。
所以用 urllib.parse.unquote(request.body.read().decode())
这个方法可以解决这个问题。
或者
d = urllib.parse.parse_qs(request.body.read().decode())
a = Agent({x: d[x][0] for x in d})
在我的情况下。
这是Bottle的一个bug吗?还是我应该告诉他怎么解码网址,但我不知道该怎么做?