我试图在python 2.7中创建一个url编码的web请求,我想发送一个python词典列表,这些词典将在服务器上解码为JSON对象列表。 从本质上讲,我正在制作:
>>>urllib.urlencode({"param":"val", "items":[item1, item2] }, True)
其中item1
可以是{ "a": u"š".encode("utf8") }
(例如,简化)
由于unicode字符而出现问题。
如果item1
本身就是编码的,那么你会得到一些有意义的东西:
>>>urllib.urlencode(item1)
'a=%C5%A1'
然而,如果我打电话给urllib.urlencode({"test": item1})
我就会弄得一团糟:
'test=%7B%27a%27%3A+%27%5Cxc5%5Cxa1%27%7D'
在这种情况下,unicode字符不再编码为%C5%A1
,而是编码为服务器端错误解码的较长序列。
在调用item1
之前,是否有人建议如何正确转换复杂字典值(即urlencode
)以避免此问题?
答案 0 :(得分:0)
您需要解码在重新编码之前编码的任何内容,这是一种方法:
dictionary = {"test": item1}
urllib.urlencode(dict([(k, decode_operation(v)) for k, v in dictionary.iteritems()]))
答案 1 :(得分:0)
我通过首先为项目列表中的每个项目调用json.dumps(item)然后调用urllib.urlencode解决了我的问题。
简而言之:
>>>urllib.urlencode({"param":"val", "items":[json.dumps(item) for item in items] }, True)
这解决了这个问题,因为unicode字符然后使用\ uXXXX进行编码,\ uXXXX可以在服务器端使用json解析器正确解码。