2016-06-16 154 views
1

我有一个关于urlencode的问题。这里有一个例子:如何使urllib.urlencode使用双引号而不是单引号?

​​

所以,我得到这个:

examresult=%7B%27spendTime%27%3A+911%2C+%27choice%27%3A+%5B%5B1593%2C+%5B0%5D%2C+False%2C+783%5D%2C+%5B1591%2C+%5B2%5D%2C+False%2C+2%5D%5D%7D&submit=true&summary=%7B%27wrong%27%3A+2%2C+%27correct%27%3A+0%7D&taskid=10&action=task_exam_save_result&examid=5 

然后,我上面的字符串复制到http://tool.chinaz.com/tools/urlencode.aspx的URL解码,并得到这个:

examresult={'spendTime': 911, 'choice': [[1593, [0], false, 783], 
[1591, [2], false, 2]]}&submit=true&summary={'wrong': 2, 'correct': 
0}&taskid=10&action=task_exam_save_result&examid=5 

所以,每个双引号变为单引号;为什么?

我希望它保留双引号,因为我必须将解码后的字符串转换为其他编程语言,例如, Java和Objective C来解析,并且它们的字符串需要双引号。

我该怎么做?

+3

请更正论点为urllib.urlencode,因为这是一个无效的字典。在这里:',“t2],False,2]],”花费时间“'我建议纠正;-) PS:你不会从它得到你的第一个结果,而是一个'SyntaxError:invalid syntax'正确指向由于这是第一个无效的字符,所以它的代码片断... – Dilettant

+1

Python不知道在dict文字中使用了''',该信息并未作为dict的一部分保存。 '{''.join(['a','c','t','i','o','n']):'task ...'}'会产生相同的结果。 – deceze

回答

3

我不会使用urlencode here,而是使用json.dumps()转换为JSON,然后使用urlencode或b64encode使它在网址中安全使用。

+0

json.dumps获取字符串;所以,之后的urlencode不应该是python的urllib.urlencode,它不接受字符串作为参数,呃? – Wesley

+0

你似乎想在'examresult'参数中传递字符串,所以你可以使用'urllib.urlencode({'examResult':json.dumps({...})})' – Jieter

+0

你是对的。接受为答案。谢谢。 – Wesley

0

引述不是字符串

这是给你哪个引用您使用,它是由Python的哪个引用它使用的一部分。

>>> 'asdf' 
'asdf' 
>>> "asdf" 
'asdf' 
>>> "as'df" 
"as'df"