Jes*_*ose 14 language-agnostic uuid
理想情况下,我希望像example.com/resources/äFg4?N??5最小数量的可见字符,但不要介意它们必须在通过HTTP传输之前进行百分比编码.
你能告诉一个方案,它可以有效地将128b UUID编码为最少数量的可见字符,而不会产生具有破坏URL的字符的结果吗?
Mar*_*rot 18
Base-64对此有好处.
{098ef7bc-a96c-43a9-927a-912fc7471ba2}
Run Code Online (Sandbox Code Playgroud)
可编码为
vPeOCWypqUOSepEvx0cbog
Run Code Online (Sandbox Code Playgroud)
最后通常的等号可以被删除,因为它们总是使字符串长度为4的倍数.而不是+和/,你可以使用一些安全的字符.你可以选择两个:- . _ ~
更多信息:
我使用 url-safe 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('=', '')
Run Code Online (Sandbox Code Playgroud)
*
这确实遵循标准: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 个八位字节”。所述base64-fucntion编码这些16个八比特组。