我知道这是一个老问题,但我通过谷歌搜索偶然发现了这个问题,并发现没有人提出只有内置功能的解决方案。
所以我很快就写了自己的。
基本上一个url字符串只能包含这些字符:a - z、a - z, 0 - 9 , -, ., _, ~, :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, %, =,一切url编码。
URL编码非常直接,只是一个百分号,后面跟着与非法字符的码点对应的字节值的十六进制数字。
所以基本上使用一个简单的while循环来迭代字符,添加任何字符的字节,如果它不是百分号,将index加1,否则添加百分号后面的字节,并将index加3,累积字节并解码它们应该可以完美地工作。
代码如下:
def url_parse(url):
l = len(url)
data = bytearray()
i = 0
while i < l:
if url[i] != '%':
d = ord(url[i])
i += 1
else:
d = int(url[i+1:i+3], 16)
i += 3
data.append(d)
return data.decode('utf8')
我已经测试过了,效果很好。