在URL中使用的Guid最短编码方式是什么?

15

Mads Kristensen 把一个GUID缩短到了00amyWGct0y_ze4lIsj2Mw。

它能再缩小吗?

2个回答

12

看起来在URL中只有73个字符可以不进行转义使用。如果是这样的话,你可以将128位数字转换为基于73的进制,那么就可以获得一个21字符长度的URL。

如果你能够找到85个合法字符,那么你可以将URL缩短至20个字符。


所以我们在URL上节省了9个字符?我发现读/朗诵十六进制比像00amyWGct0y_ze4lIsj2Mw这样的东西更容易。 - hometoast
1
@hometoast:是的,嗯,这似乎并不是OP的限制。;) - retracile
1
我使用Ascii85编码将Guid写入数据库列中,使用20个ASCII字符。如果有用的话,我已经发布了C#代码。特定的字符集可能对于URL编码不同,但您可以选择适合您应用程序的任何字符。它在这里提供:https://dev59.com/cHE85IYBdhLWcg3wVR-g#4211088 - sheikhjabootie
3
从链接的页面中可以看到,该列表中列出了“A-Za-z0-9”和“$-_.+!'(),”这些字符,这些字符是从RFC 1738第2.2节中提取的。看起来你所提到的RFC 3986更新了RFC 1738。RFC 3986第2.2节将7个字符“$+!(),”作为保留字符作为子分隔符。因此,这些7个字符是1994年至2005年之间出现的,而截至2005年,字符总数已经增加到66个。 - retracile

5

GUID看起来像这样 c9a646d3-9c61-4cb7-bfcd-ee2522c8f633 - 这是32个十六进制数字,每个数字编码4个比特,因此总共有128个比特。

使用base64编码每个符号使用6个比特,可以使用URL安全字符轻松实现22个字符的编码字符串。正如其他人指出的那样,您可以使用73个URL安全符号并将其编码为基数为73的数字以获得21个字符。


你是如何推导出“从URL安全字符中提取6位”的? - Dominic Rodger
没有127个URL安全字符,因此假定6位是最大值。 - Paul Dixon
6位是base64,原始链接指向的地方。如果你能获得超过64个字符,比如85个字符,你可以将128位数字转换为base85,并缩短到20个字符。但它不会像base64那样好看。 - retracile
1
Base64使用6位。但是,您需要从Base64字符列表中替换“/”。 - David
@Dominic:Base64 = 每个实际数据字节的6位。 - Spencer Ruport

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接