Created
May 3, 2024 15:04
-
-
Save diyan/78dfb3628c2fcc9d14cc8f8184f69f14 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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