理想情况下,我想要example.com/resources/äFg4вNгё5
,可见字符的最小数量,更不用说在通过HTTP传输它们之前必须进行百分比编码。
你能告诉一个方案,它可以有效地将128b UUID编码为最少数量的可见字符,而结果却没有破坏URL的字符吗?
答案 0 :(得分:17)
Base-64对此有好处。
{098ef7bc-a96c-43a9-927a-912fc7471ba2}
可以编码为
vPeOCWypqUOSepEvx0cbog
最后的常用等号可能会被删除,因为它们总是使字符串长度为4的倍数。而不是+
和/
,您可以使用一些安全字符。您可以选择以下两项:-
.
_
~
更多信息:
答案 1 :(得分:4)
我使用url-safe base64字符串。以下是执行此 * 。
的一些Python代码最后一行删除了基本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 Format表示“UUID格式为16个八位字节”。 base64
- 功能编码这16个八位字节。
子>