如果您的输入是 UTF-8,您可以将每个字节编码为 Base10,而不是将自己限制为某些固定的数字集。然后挑战变成了解码。一些基于 Web 的 Base10 编码器用空格分隔每个编码的字符/字节。我选择使用可以修剪的空字符左填充。
我相信这里有很大的优化空间,但这两个函数符合我的需求:
编码:
def base10Encode(inputString):
stringAsBytes = bytes(inputString, "utf-8")
stringAsBase10 = ""
for byte in stringAsBytes:
byteStr = str(byte).rjust(3, '\0') # Pad left with null to aide decoding
stringAsBase10 += byteStr
return stringAsBase10
解码:
def base10Decode(inputString):
base10Blocks = []
for i in range(0, len(inputString), 3):
base10Blocks.append(inputString[i:i+3])
decodedBytes = bytearray(len(base10Blocks))
for i, block in enumerate(base10Blocks):
blockStr = block.replace('\0', '')
decodedBytes[i] = int(blockStr)
return decodedBytes.decode("utf-8")