繁体   English   中英

如何在python中编码url

[英]how to encode url in python

我创建了一个用于解码url的函数。

from urllib import unquote

def unquote_u(source):
  result = source
  if '%u' in result:
    result = result.replace('%u','\\u').decode('unicode_escape')
  result = unquote(result)
  print result
  return result

if __name__=='__main__':
    unquote_u('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3Afalse%7D')

但是,我不希望获得正确的文件名。 正确的文件名为:test_哦另一腿哦.doc

谁能告诉我该怎么做?

urllib.unquote可以做到:

>>> urllib.unquote('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3AFalse%7D')
'{"":"test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt","mimeType":"text/plain","compressed":False}'
>>> eval(_)
{'': 'test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt', 'mimeType': 'text/plain', 'compressed': False}
>>> _['']
'test_\xe5\x93\xa6\xe4\xba\x88\xe4\xbb\xa5\xe8\x85\xbf\xe5\x93\xa6.doc.txt'
>>> print _
test_哦予以腿哦.doc.txt

请注意,我必须在引用的字符串中将“ false”更改为“ False”。 同样,取消引用后的字符串仍然是UTF-8编码的; 您可以使用str.decode('utf8')获得Unicode字符串(如果需要)。


正如JBernardo所提到的,不安全数据的eval()是一个非常糟糕的主意。 任何知道甚至怀疑服务器端脚本正在通过eval()传递表单数据的人,都可以轻松地使用可能危害服务器的命令来编写POST。 更好的是:

 >>> import json, urllib >>> json.loads(urllib.unquote('{%22%22%3A%22test_%E5%93%A6%E4%BA%88%E4%BB%A5%E8%85%BF%E5%93%A6.doc.txt%22%2C%22mimeType%22%3A%22text%2Fplain%22%2C%22compressed%22%3Afalse%7D'))[''] u'test_\哦\予\以\腿\哦.doc.txt' >>> print _ test_哦予以腿哦.doc.txt 

还要注意,后面的这种方法不需要将false更改为False。 事实上,如果我这样做是行不通的。 json包负责这一点。

要添加的一件事是,从urllib.unquote(url)中获取未加引号的url之后,您可能需要使用解码('utf8')将原始字符串转换为unicode字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM