我有一个用Python3编写的简单web服务器(使用http.server
中的类),我将它从2移植到3。在
我有以下代码:
# More code here...
postvars = cgi.parse_qs(self.rfile.read(length),
keep_blank_values=1)
something.json_run(json.dumps(postvars))
会引发:
^{pr2}$通过检查数据,我确定了parse_qs
似乎将密钥编码为字节,这就是引发错误的原因(json
显然不喜欢字节)。在
import json
json.dumps({b'Throws error' : [b"Keys must be a string"]})
json.dumps({'Also throws error': [b'TypeError, is not JSON serializable']})
json.dumps({'This works': ['No bytes!']})
最好的解决办法是什么?对于Python2,代码工作得很好,因为parse_qs
使用了str
,而不是{
首先,
cgi.parse_qs
函数不推荐使用,它只是urllib.parse.parse_qs
的别名,您可能需要调整导入路径。在其次,将一个字节字符串传入parse方法。如果传入常规(unicode)字符串,
parse_qs
方法返回常规字符串:因此,您需要先将文件读取字节字符串解码为常规字符串。在
相关问题 更多 >
编程相关推荐