如何使用编码的unicode字符对一个python字典的值进行urlencode

时间:2015-06-25 10:21:01

标签: python dictionary unicode urllib

我试图在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)以避免此问题?

2 个答案:

答案 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解析器正确解码。