Простой метод использует кодировку Base64 для кодирования значения. Он очень похож на Hex-кодирование (которое является Base16), но использует более длинный словарь.
Строки Base64, при правильной подготовке, содержат только печатные символы. Это преимущество для копирования/вставки и для совместного использования.
Второе преимущество заключается в том, что он имеет коэффициент кодирования 3: 4, что означает, что он достаточно эффективен. Коэффициент кодирования 3: 4 означает, что для каждого 3 байта на входе используются 4 байта для кодирования (75% эффективности); Hex-кодирование является менее эффективным коэффициентом кодирования 1: 2 или для каждого 1 байта ввода, для кодирования используются 50 байтов (50% эффективности).
Вы можете использовать стандартную библиотеку Ruby Base64 реализацию для кодирования и декодирования, например, так:
require "base64"
encoded = Base64.encode64("Taste the thunder!") # <== "VGFzdGUgdGhlIHRodW5kZXIh\n"
decoded = Base64.decode64(encoded) # <== "Taste the thunder!"
Обратите внимание, что есть (в основном) URL-безопасная версия, а также, так что вы можете включить закодированное значение в любом месте URL-адреса, не требуя дополнительной URL-кодировки. Это позволит вам пропускать информацию в URL-адресе неясным образом и, особенно, информацию, которая обычно не будет легко передаваться таким образом.
Попробуйте для кодирования данных:
encoded_url_param = Base64.urlsafe_encode64("cake+pie=yummy!") # <== "Y2FrZStwaWU9eXVtbXkh"
decoded_url_param = Base64.urlsafe_decode64(encoded_url_param) # <== "cake+pie=yummy!"
Использование Base64 в URL, в то время как на самом деле не «безопасности», поможет держать любопытных глаз от ваших данных и намерения. Единственным потенциальным недостатком использования значений Base64 в URL-адресе является то, что URL-адрес должен оставаться чувствительным к регистру, а некоторые приложения не соблюдают это требование. См. Вопрос Should URL be case sensitive SO для получения дополнительной информации.
Как вы начинаете чтение/загрузку двоичных данных? Каков источник данных (например, потоковая передача, например, входящая в сеть или статическая по длине, например, файл?)? Как вы выполняете рендеринг/вывод необработанных данных, чтобы они отображались как «? Q? O?»? W% ʐ) :? g ???????? '? –