python base100

def encode(data, encoding="utf-8"):
    """
    Encodes text to emoji
    :param data: Original text as bytes array or plaintext
    :param encoding: (Optional) encoding if {data} passed as plaintext
    :return: bytes array of encoded text
    """
    if isinstance(data, str):
        data = data.encode(encoding)
    out = [240, 159, 0, 0]*len(data)
    for i, b in enumerate(data):
        out[4*i+2] = (b + 55) // 64 + 143
        out[4*i+3] = (b + 55) % 64 + 128
    return bytes(out)


def decode(data, encoding="utf-8"):
    """
    Decodes emoji to text
    :param data: Encoded text in form of emoji as bytes array or plaintext
    :param encoding: (Optional) encoding if {data} passed as plaintext
    :return: bytes array of decoded text
    """
    if isinstance(data, str):
        data = data.encode(encoding)
    if len(data) % 4 != 0:
        raise Exception('Length of string should be divisible by 4')
    tmp = 0
    out = [None]*(len(data) // 4)
    for i, b in enumerate(data):
        if i % 4 == 2:
            tmp = ((b - 143) * 64) % 256
        elif i % 4 == 3:
            out[i//4] = (b - 128 + tmp - 55) & 0xff
    return bytes(out)


string = "Hello World!"
encoded = encode(string) # Encode the string
print(encoded.decode())
decoded = decode(encoded) # Decode the encoded string
print(decoded.decode())

 

posted @ 2022-08-30 14:57  Maple_feng  阅读(169)  评论(0编辑  收藏  举报