bottle将POST请求转换为unicode

1 投票
2 回答
595 浏览
提问于 2025-04-18 18:23

我有一个服务器应用,除了在保存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吗?还是我应该告诉他怎么解码网址,但我不知道该怎么做?

撰写回答