前景:做tornado和h5结合的实验中,遇到这个问题,
files = self.request.files
people_file = files.get('people')#get file
#data = people_file['body']
bstr = people_file[0]['body']
#--------------test output---------
#print(bstr) #b'jasion\r\nkenny\r\njendall.....'
#print(type(bstr)) #<class 'bytes'>
#data = str(people_file[0]['body'],'utf-8') -> error
#decode() ->error
data = str(bstr)
name = data.split('\r\n')
res = []
print("name:",name) #['jasion', 'kenny', 'jendall', '']
#print("people_file:",people_file)#内容含'body': b'jasion\r\nkenny\r\njendall\r\n'
print("data",data)
for i in name:
if (i != ''):
res.append(i)
print("res:",res)
name: ["b'jasion\\r\\nkenny\\r\\njendall\\r\\nkadashan\\r\\nben\\r\\nallen\\r\\nfaceujoi\\r\\nzhuyuyua\\r\\njainsld \\r\\njasmine\\r\\nmac\\r\\nmile\\r\\nmike\\r\\ntony\\r\\nwangmy\\r\\n'"]
data b'jasion\r\nkenny\r\njendall\r\nkadashan\r\nben\r\nallen\r\nfaceujoi\r\nzhuyuyua\r\njainsld \r\njasmine\r\nmac\r\nmile\r\nmike\r\ntony\r\nwangmy\r\n'
res: ["b'jasion\\r\\nkenny\\r\\njendall\\r\\nkadashan\\r\\nben\\r\\nallen\\r\\nfaceujoi\\r\\nzhuyuyua\\r\\njainsld \\r\\njasmine\\r\\nmac\\r\\nmile\\r\\nmike\\r\\ntony\\r\\nwangmy\\r\\n'"]
ERROR:tornado.application:Uncaught exception POST /?award= (::1)
HTTPServerRequest(protocol='http', host='localhost:8888', method='POST', uri='/?award=', version='HTTP/1.1', remote_ip='::1')
可以看到,bstr是file中的body值,也就是表单的值,只不过传输用了二进制bytes格式,导致bstr是b'............'格式,
然后因为decode转换失败(这个原因我也没搞懂,报错信息0xd6),
用了str()函数,得到的是data,
将data进行字符串分割,得到列表name,错误结果,多了斜杠。
原因其实是我没有在字符串前加r!因为\r\n都是空白符,但是在bytes转换成str后是无此义的