tornado处理表单提交的中文数据

背景描述

前端通过表单提交了带有中文的数据,后端想对这些数据进行处理。request.body是一个binary变量,虽然可以将之解码为utf8但仍然不是中文形式,类似于

%E8%BF%98%E6%AC%BE%E6%88%90%E5%8A%9F%E9%A1%B5

查过相关回答后,我找到一种可行的办法,在此记录一下。

解决方法

前端HTML文件指定form表单的相关参数,如下:

<form action="/" method="post" accept-charset="UTF-8" enctype="application/x-www-form-urlencoded">
</form>

后端post过程如下:

import tornado
import urllib.parse

class MyTestHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('test.html')

    def post(self):
        body = self.request.body.decode('utf8')
        body = urllib.parse.unquote(body)
        print(body)
        # something else
        # self.render('test.html')

我的前端结果输入了两句中文文本
在这里插入图片描述
结果如下:

文案内容_0=这是一个测试文案&文案内容_1=这是另一个测试文案

学习笔记

注意enctype这个参数,我之前使用的是multipart/form-data,但是实际解析起来发现,虽然可以显示中文,结果类似:
在这里插入图片描述

但是还有其他的问题:

  1. body中还多了指定的分隔符,形如------WebKitFormBoundarySUFFIX,其中的每post一次,SUFFIX都会变化
  2. 如果有内容,body还会多一个Content-Disposition: form-data;

其实这是一个关于http协议处理的问题,我没有进一步了解。觉得这篇博客整理的很简明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章