Skip to content

Instantly share code, notes, and snippets.

@diyan
Created May 3, 2024 15:04
Show Gist options
  • Save diyan/78dfb3628c2fcc9d14cc8f8184f69f14 to your computer and use it in GitHub Desktop.
Save diyan/78dfb3628c2fcc9d14cc8f8184f69f14 to your computer and use it in GitHub Desktop.
from baseconv import BaseConverter
# Project setup:
# python3 -m venv .
# . bin/activate
# pip install python-baseconv
# python3 git_url_encoder.py
BASE58_ALPHABET = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
base58 = BaseConverter(BASE58_ALPHABET, sign='-')
# Reduced character set, order is the same as ASCII set, see https://ascii-code.com
ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-'
# Custom encoder tutorial https://medium.com/swlh/creating-custom-character-encoding-to-save-space-5cc1e53b8f34
def my_encode(value):
char_codes = [ALPHABET.index(char) for char in value.upper()]
result = 0
for index, char_code in enumerate(char_codes):
result = result + char_code * pow(len(ALPHABET), len(char_codes) - 1 - index)
return result
before_encode = 'some-fairly-long-URL-to-be-encoded'
after_encode = base58.encode(int.from_bytes(bytes(before_encode, 'utf-8')))
print(before_encode, "- original text")
after_my_encode = base58.encode(my_encode(before_encode))
print(after_my_encode, "- custom encoder then base58\n")
print(after_encode, "- utf8 encoder then base58\n")
# OUTPUT:
# some-fairly-long-URL-to-be-encoded - original text
# 327r1dm63riPzwXmaSSxqARAbVUY6rQ - custom encoder then base58
# 3BmBeSjj7vouzFTw25iM7VUJ7k1jkdgrvHDZLZCYoQUCXjU - utf8 encoder then base58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment