Tornado编码post参数因UnicodeDecodeError而失败

时间:2014-05-14 06:19:05

标签: python-3.x encoding tornado

有些人一直在使用我的Tornado应用程序并发出包含此字符的POST请求:¡

Tornado无法解码该值并最终出现此错误:HTTP 400:错误请求(PARAMNAME中的无效unicode:b' DATAHERE')

所以我做了一些调查,并了解到在请求正文中,我收到了%A1的相应字符,python的decode方法没有难以解码{{1}编码。

但是,在对这个值进行URL解码之后,Tornado最终得到utf-8字符,并尝试使用utf-8对其进行解码并失败,因为这实际上是 ISO-8859-1 编码。

那么,解决这个问题的适当方法应该是什么?因为用户正在发送有效输出,所以我不想丢失这些数据。

1 个答案:

答案 0 :(得分:1)

最好的答案是确保客户端始终发送utf8而不是iso8859-1(这曾经需要像铁路雪人那样奇怪的技巧;我不确定当前的最新技术水平)。如果你不能这样做,请覆盖RequestHandler.decode_argument(http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.decode_argument),它可以看到原始字节并决定如何解码它们(或者如果你不想在此时解码则传递它们。)< / p>