gpt4 book ai didi

python - Tornado x-www-form-urlencoded 主体无效 : 'latin-1' codec can't encode characters in position 774-777: ordinal not in range(256)

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:35 25 4
gpt4 key购买 nike

我正在使用 Tornado 接受从我无权访问的客户端发送的一些数据。如果数据中仅出现英文字符,则一切正常。当数据中包含 utf-8 编码的中文字符(3 个字节)时,Tornado 会给出此警告,并且“get_argument”函数根本无法获取任何内容。

我调试并简化了我的代码到最简单的,但警告仍然出现

class DataHandler(tornado.web.RequestHandler):
def post(self):
print("test")
print(self.get_argument("data"))
print("1")

application = tornado.web.Application([
(r"/data", Data),
])

application.listen(5000)
tornado.ioloop.IOLoop.instance().start()

数据的格式如下所示:

data={"id":"00f1c423","mac":"11:22:33:44:55:66"}

数据采用x-www-form-urlencoded,WireShark显示中文字符是完美的3字节utf-8,以E(1110)开头。警告(774-777)中提到的位置是汉字的开始位置,尽管汉字发生了变化,但它始终是5个字节。

我对警告中的“编码”感到困惑。实际上,我在代码中没有对编码进行任何操作,因此我认为这就是 Tornado 在 RequestHandler 类中所做的事情。但是由于Tornado默认使用utf-8编解码器,那么这个latin-1从哪里来呢?最重要的是,我该如何解决它?

最佳答案

这将不再是问题。 Tornado 做了一些更改来支持 x-www-form-urlencoded 正文,其值由编码字节组成,但未 url 编码为 ascii。

参见:tornado merge request

另外:github issue #2733

关于python - Tornado x-www-form-urlencoded 主体无效 : 'latin-1' codec can't encode characters in position 774-777: ordinal not in range(256),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com