кратчайшая кодировка для Guid для использования в URL

Безумный Кристенсен опустил один до 00amyWGct0y_ze4lIsj2Mw

Может ли оно быть меньше этого?


person mcintyre321    schedule 14.08.2009    source источник


Ответы (2)


Похоже, в URL-адресе без экранирования можно использовать только 73 символа. . ЕСЛИ это так, вы можете преобразовать 128-битное число в основание 73 и получить URL-адрес из 21 символа.

ЕСЛИ вы можете найти 85 разрешенных символов, вы можете перейти к URL-адресу из 20 символов.

person retracile    schedule 14.08.2009
comment
Значит, мы сохраняем 9 символов в URL-адресе? Мне на самом деле легче читать / произносить шестнадцатеричный код, чем что-то вроде 00amyWGct0y_ze4lIsj2Mw - person hometoast; 14.08.2009
comment
@hometoast: Да, ну, похоже, это не было ограничением для OP. ;) - person retracile; 14.08.2009
comment
Я использовал кодировку Ascii85 для записи Guid в столбец базы данных в 20 символов ASCII. Я разместил код C # на случай, если он пригодится. Конкретный набор символов может отличаться для кодировки URL-адреса, но вы можете выбрать любые символы, подходящие для вашего приложения. Он доступен здесь: stackoverflow.com/questions/2827627/ - person sheikhjabootie; 18.11.2010
comment
Я не уверен, откуда вы берете номер 73 - в tools.ietf .org / html / rfc3986 # section-2.3 есть только 66 незарезервированных символов: 'A-Z', 'a-z', '0-9', '-', '.', '_' , и '~'. Какие еще 7 персонажей? - person slacy; 19.12.2012
comment
@slacy: со страницы, на которую имеется ссылка; в нем перечислены A-Za-z0-9 и $-_.+!*'(),, взятые из раздела 2.2 RFC 1738. Похоже, RFC 3986, на который вы ссылались, обновляет RFC 1738. 7 символов $+!*(), появляются в разделе 2.2 RFC 3986 как зарезервированные символы в качестве разделителей. Итак, эти 7 символов пришли из 1994-2005 годов, а по состоянию на 2005 год это 66 символов. - person retracile; 28.12.2012

GUID выглядит так: c9a646d3-9c61-4cb7-bfcd-ee2522c8f633 - это 32 шестнадцатеричные цифры, каждая из которых кодирует 4 бита, итого 128 бит

В кодировке base64 используется 6 бит на символ, чего легко добиться с помощью безопасных символов URL, чтобы получить строку из 22 символов. Как отмечали другие, вы можете использовать 73 безопасных символа URL и закодировать как базовое число 73, чтобы получить 21 символ.

person Paul Dixon    schedule 14.08.2009
comment
Как вы получили 6 битов из символьного бита, безопасного для URL? - person Dominic Rodger; 14.08.2009
comment
Не существует 127 безопасных символов URL, поэтому предполагается, что максимум 6 бит. - person Paul Dixon; 14.08.2009
comment
6 бит - это base64, на который пошла исходная ссылка. Если вы можете получить более 64 символов, скажем, 85, вы можете преобразовать 128-битное число в базу 85 и сократить до 20 символов. Это будет не так хорошо, как base64. - person retracile; 14.08.2009
comment
Base64 использует 6 бит. Однако вам придется заменить / из списка символов Base64. - person David; 14.08.2009
comment
@Dominic: Base64 = 6 бит на байт фактических данных. - person Spencer Ruport; 14.08.2009