Сделать UUID короче (преобразование из шестнадцатеричного кода в ASCII) - PullRequest
1 голос
/ 24 ноября 2010

В моем веб-приложении одна модель использует идентификатор, сгенерированный каким-то инструментом UUID. Поскольку я хочу, чтобы этот идентификатор был частью URL-адреса, я изучаю методы сокращения этой строки UUID. Поскольку он в настоящее время находится в шестнадцатеричном формате, я подумал о том, чтобы как-то преобразовать его в ASCII. Поскольку впоследствии он должен содержать только нормальные символы и цифры ([\ d \ w] +), нормальное преобразование гекса в ASCII, похоже, не работает (некрасивые символы). Вы знаете какой-нибудь хороший алгоритм или инструмент (Ruby) для этого?

1 Ответ

4 голосов
/ 24 ноября 2010

UUID - это 128-битное двоичное число, в конце концов. Если вы представляете это как 16 незакодированных байтов, нет способа избежать «некрасивых символов». Что вы, вероятно, хотите сделать, это декодировать его из шестнадцатеричного кода, а затем кодировать его, используя base64 . Обратите внимание, что в кодировке base64 используются символы + / =, а также A-Za-z0-9, вам нужно выполнить небольшую постобработку (я предлагаю s/+/-/g; s/\//_/g; s/==$// - UUID с base64ed всегда заканчивается двумя знаками равенства)

...