Enhance unquote_unreserved to handle all strings

This commit is contained in:
Cory Benfield
2015-09-01 09:29:49 +01:00
parent d185a40aaf
commit 5530091b86
+12 -4
View File
@@ -422,7 +422,15 @@ def unquote_unreserved(uri):
"""Un-escape any percent-escape sequences in a URI that are unreserved
characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
"""
parts = uri.split(b'%')
# Handle both bytestrings and unicode strings.
if isinstance(uri, bytes):
splitchar = b'%'
base = b''
else:
splitchar = u'%'
base = u''
parts = uri.split(splitchar)
for i in range(1, len(parts)):
h = parts[i][0:2]
if len(h) == 2 and h.isalnum():
@@ -434,10 +442,10 @@ def unquote_unreserved(uri):
if c in UNRESERVED_SET:
parts[i] = c + parts[i][2:]
else:
parts[i] = '%' + parts[i]
parts[i] = splitchar + parts[i]
else:
parts[i] = '%' + parts[i]
return ''.join(parts)
parts[i] = splitchar + parts[i]
return base.join(parts)
def requote_uri(uri):