Pracuję nad stworzeniem skracacza adresów URL dla mojej witryny, a mój obecny plan (jestem otwarty na sugestie) zakłada użycie identyfikatora węzła do wygenerowania skróconego adresu URL. Zatem teoretycznie może to być węzeł 26 short.com/z
, węzeł 1 short.com/a
, węzeł 52 short.com/Z
i węzeł 104 short.com/ZZ
. Kiedy użytkownik przechodzi do tego adresu URL, muszę odwrócić ten proces (oczywiście).
Przychodzi mi do głowy kilka niezdarnych sposobów, aby to osiągnąć, ale domyślam się, że są lepsze. Jakieś sugestie?
Odpowiedzi:
ASCII do int:
daje
97
I wracając do ciągu:
str(unichr(97))
chr(97)
daje
'a'
źródło
źródło
Jeśli wiele znaków jest powiązanych w jednej liczbie całkowitej / długości, tak jak mój problem:
Plony
'0123456789'
ix = 227581098929683594426425L
źródło
A co z kodowaniem BASE58 adresu URL? Tak jak na przykład flickr.
Przekształcenie tego z powrotem w liczbę też nie jest wielkim problemem.
źródło
Użyj
hex(id)[2:]
iint(urlpart, 16)
. Istnieją inne opcje. kodowanie base32 również może działać, ale nie wiem, czy istnieje biblioteka, która obsługuje kodowanie base32 wbudowane w Python.Najwyraźniej koder base32 został wprowadzony w Pythonie 2.4 z modułem base64 . Możesz spróbować użyć
b32encode
ib32decode
. Powinieneś podaćTrue
obie opcjecasefold
imap01
nab32decode
wypadek, gdyby ludzie zapisali twoje skrócone adresy URL.Właściwie to cofam. Nadal uważam, że kodowanie base32 jest dobrym pomysłem, ale ten moduł nie jest przydatny w przypadku skracania adresu URL. Możesz spojrzeć na implementację w module i stworzyć własną dla tego konkretnego przypadku. :-)
źródło