Z docs:
urllib.quote(string[, safe])
Wymień znaków specjalnych w ciąg pomocą ucieczkę% xx. Litery, cyfry, i znaki "_.-" nigdy nie są cytowane pod numerem . Domyślnie ta funkcja jest przeznaczona dla cytując odcinek ścieżki z URL.The opcjonalnym bezpiecznej parametru określa dodatkowe znaki, które nie powinny być cytowane - jego wartość domyślna jest „/”
Że oznacza przejściu „” dla bezpiecznego rozwiąże pierwszy problem:
>>> urllib.quote('/test')
'/test'
>>> urllib.quote('/test', safe='')
'%2Ftest'
o drugiej kwestii, istnieje raport o błędzie o tym here. Najwyraźniej zostało to naprawione w Pythonie 3. Można obejść go jako kodowanie utf8 jak ten:
>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller
Przy okazji rzucić okiem na urlencode
Zauważ, że urllib.quote
przeniesiona do urllib.parse.quote
w Python3
dziękuje, zarówno działał świetnie. urlencode po prostu wywołuje quoteplus wiele razy w pętli, co nie jest prawidłową normalizacją dla mojego zadania (oauth). –
Spec: [rfc 2396] (https://www.ietf.org/rfc/rfc2396.txt) definiuje je jako zastrzeżone 'zarezerwowane ="; " | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," "Z czym właśnie się zajmuje urllib.quote. –
'urllib.quote' przeniesiony do' urlib.parse.quote', od Python3. – Hibou57