19

理想情况下,我想要example.com/resources/äFg4вNгё5最小数量的可见字符,不要介意在通过 HTTP 传输它们之前必须对它们进行百分比编码。

你能说出一个有效地将 128b UUID 编码为最少数量的可见字符的方案,而结果没有破坏 URL 的字符吗?

4

2 回答 2

22

Base-64 对此有好处。

{098ef7bc-a96c-43a9-927a-912fc7471ba2}

可以编码为

vPeOCWypqUOSepEvx0cbog

末尾的通常等号可以被删除,因为它们总是使字符串长度成为 4 的倍数。您可以使用一些安全字符来代替+and 。/您可以从以下选项中选择两个:- . _ ~

更多信息:

于 2012-07-15T11:20:07.600 回答
5

我使用 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 个八位字节进行编码。

于 2013-08-29T18:19:28.390 回答