Language agnostic URL安全UUID的最小字符数

Language agnostic URL安全UUID的最小字符数,language-agnostic,uuid,Language Agnostic,Uuid,理想情况下,我想要像example.com/resources/äFg4öNΓё5这样的东西,即可见的字符的最小数量,更不用说它们在通过HTTP传输之前必须进行百分比编码 你能告诉我一个方案,它能有效地将128b UUID编码成最少数量的可见字符,而不会产生破坏URL的字符吗?Base-64适合这样做 {098ef7bc-a96c-43a9-927a-912fc7471ba2} 可以被编码为 vPeOCWypqUOSepEvx0cbog 通常结尾处的等号可以去掉,因为它们总是使字符串长度为4

理想情况下,我想要像
example.com/resources/äFg4öNΓё5
这样的东西,即可见的字符的最小数量,更不用说它们在通过HTTP传输之前必须进行百分比编码


你能告诉我一个方案,它能有效地将128b UUID编码成最少数量的可见字符,而不会产生破坏URL的字符吗?

Base-64适合这样做

{098ef7bc-a96c-43a9-927a-912fc7471ba2}
可以被编码为

vPeOCWypqUOSepEvx0cbog
通常结尾处的等号可以去掉,因为它们总是使字符串长度为4的倍数。您可以使用一些安全字符,而不是
+
/
。您可以从中选择两个:
-
~

更多信息:

  • (爪哇)
  • (C#)
  • (C#)

我使用url安全的base64字符串。下面是一些实现这一点的Python代码*

最后一行删除了base 64 encoding喜欢在末尾加上的“=”或“==”符号,这使得将字符放入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\u b64encode
遵循RFC 3548和4648,请参阅。允许从已知长度的base64编码数据中剥离
==
,请参阅。在中指定UUID/GUID;声明“UUID格式为16个八位字节”。
base64
-function对这16个八位字节进行编码。

国际角色仍然有点像一罐蠕虫;它可能总是在浏览器中工作,但如果您在不同的应用程序中进行复制粘贴,例如邮件客户端、即时通讯器,或者最脆弱的情况下,SMS,它们将崩溃。答案中建议的Base64仍然是最好的方法,除非您做出危险的假设,即用户不会在同一web浏览器之外使用这些链接。不适用于python3,您应该使用:
return Base64.urlsafe\u b64encode(uuid.uuid4().bytes)。strip(“=”
(也适用于python 2,返回unicode字符串)。是否将URL安全uuid保存为模型uuid,或根据需要来回转换?@reducegosling我保存URL安全uuid