将底层字节转换为 base64 值,去除=
填充和换行符。
您可能希望使用该base64.urlsafe_b64encode()
函数来避免使用/
and +
(_
并-
改为使用),因此生成的字符串可以用作 URL 路径元素:
>>> import uuid, base64
>>> base64.urlsafe_b64encode(uuid.uuid1().bytes).rstrip(b'=').decode('ascii')
'81CMD_bOEeGbPwAjMtYnhg'
相反:
>>> uuid.UUID(bytes=base64.urlsafe_b64decode('81CMD_bOEeGbPwAjMtYnhg' + '=='))
UUID('f3508c0f-f6ce-11e1-9b3f-002332d62786')
要将其转换为通用函数:
from base64 import urlsafe_b64decode, urlsafe_b64encode
from uuid import UUID
def uuid2slug(uuidstring):
return urlsafe_b64encode(UUID(uuidstring).bytes).rstrip(b'=').decode('ascii')
def slug2uuid(slug):
return str(UUID(bytes=urlsafe_b64decode(slug + '==')))
这为您提供了一种以更紧凑的形式表示 16 字节 UUID 的方法。进一步压缩会丢失信息,这意味着您无法再次将其解压缩为完整的 UUID。16 个字节可以表示的所有值都不会小于 22 个 base64 字符,每三个字节的输入需要 4 个字符,每个字符编码 6 位信息。
因此,YouTube 的唯一字符串不是基于完整的 16 字节 UUID,它们的 11 个字符 id 可能存储在数据库中以便于查找并基于较小的值。