理想情况下,我想要example.com/resources/äFg4вNгё5
最小数量的可见字符,不要介意在通过 HTTP 传输它们之前必须对它们进行百分比编码。
你能说出一个有效地将 128b UUID 编码为最少数量的可见字符的方案,而结果没有破坏 URL 的字符吗?
理想情况下,我想要example.com/resources/äFg4вNгё5
最小数量的可见字符,不要介意在通过 HTTP 传输它们之前必须对它们进行百分比编码。
你能说出一个有效地将 128b UUID 编码为最少数量的可见字符的方案,而结果没有破坏 URL 的字符吗?
Base-64 对此有好处。
{098ef7bc-a96c-43a9-927a-912fc7471ba2}
可以编码为
vPeOCWypqUOSepEvx0cbog
末尾的通常等号可以被删除,因为它们总是使字符串长度成为 4 的倍数。您可以使用一些安全字符来代替+
and 。/
您可以从以下选项中选择两个:-
.
_
~
更多信息:
我使用 url 安全的 base64 字符串。以下是一些执行此操作的 Python 代码*。
最后一行删除了 base 64 编码喜欢放在末尾的 '=' 或 '==' 符号,它们使将字符放入 URL 更加困难,并且只需要对信息进行解码,不需要在这里完成。
import base64
import uuid
# get a UUID - URL safe, Base64
def get_a_Uuid():
r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
return r_uuid.replace('=', '')
*
这确实遵循标准:base64.urlsafe_b64encode
遵循 RFC 3548 和 4648 参见https://docs.python.org/2/library/base64.html。==
允许从已知长度的 base64 编码数据中剥离,请参阅RFC 4648 §3.2。UUID/GUID 在RFC 4122中指定; §4.1 格式声明“UUID 格式为 16 个八位字节”。-fucntionbase64
对这 16 个八位字节进行编码。