有些人一直在使用我的Tornado应用程序并发出包含此字符的POST请求:¡
Tornado无法解码该值并最终出现此错误:HTTP 400:错误请求(PARAMNAME中的无效unicode:b' DATAHERE')
所以我做了一些调查,并了解到在请求正文中,我收到了%A1
的相应字符,python的decode
方法没有难以解码{{1}编码。
但是,在对这个值进行URL解码之后,Tornado最终得到utf-8
字符,并尝试使用utf-8对其进行解码并失败,因为这实际上是 ISO-8859-1 编码。
那么,解决这个问题的适当方法应该是什么?因为用户正在发送有效输出,所以我不想丢失这些数据。
答案 0 :(得分:1)
最好的答案是确保客户端始终发送utf8而不是iso8859-1(这曾经需要像铁路雪人那样奇怪的技巧;我不确定当前的最新技术水平)。如果你不能这样做,请覆盖RequestHandler.decode_argument(http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.decode_argument),它可以看到原始字节并决定如何解码它们(或者如果你不想在此时解码则传递它们。)< / p>