使用python编码URL的百分比

l--*_*''' 7 python url encoding

当我在maps.google.com中输入网址时,例如https://dl.dropbox.com/u/94943007/file.kml,它会将此网址编码为:

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml
Run Code Online (Sandbox Code Playgroud)

我想知道这个编码叫什么,有没有办法使用python编码这样的URL?

我试过这个:

该过程称为URL编码:

>>> urllib.quote('https://dl.dropbox.com/u/94943007/file.kml', '')
'https%3A%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'
Run Code Online (Sandbox Code Playgroud)

但没有得到预期的结果:

'https%3A//dl.dropbox.com/u/94943007/file.kml'
Run Code Online (Sandbox Code Playgroud)

我需要的是这个:

https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml
Run Code Online (Sandbox Code Playgroud)

我如何正确编码此URL?

这里的文件:

https://developers.google.com/maps/documentation/webservices/

状态:

所有要进行URL编码的字符都使用'%'字符和与其UTF-8字符对应的双字符十六进制值进行编码.例如,UTF-8中的上海+中国将被URL编码为%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B.字符串?而Mysterians将被URL编码为%3F +和+ the Mysterians.

Luk*_*raf 7

使用

urllib.quote_plus(url, safe=':')
Run Code Online (Sandbox Code Playgroud)

由于您不希望编码冒号,因此在调用时需要指定urllib.quote():

>>> expected = 'https:%2F%2Fdl.dropbox.com%2Fu%2F94943007%2Ffile.kml'
>>> url = 'https://dl.dropbox.com/u/94943007/file.kml'
>>> urllib.quote(url, safe=':') == expected
True
Run Code Online (Sandbox Code Playgroud)

urllib.quote()采用safe默认的关键字参数/并指示哪些字符被认为是安全的,因此不需要进行编码.在您使用的第一个示例中'',导致斜杠被编码.您在下面没有编码斜杠的情况下粘贴的意外输出可能来自之前没有设置关键字参数的尝试safe.

覆盖默认值'/'而不是排除冒号':'是最终产生所需结果的东西.

编辑:此外,API要求将空格编码为加号.因此urllib.quote_plus()应该使用(其关键字参数safe不默认'/').