Spec-Zone.ru › Ruby 3.2

модуль Base64

Модуль Base64 обеспечивает кодирование (encode64, strict_encode64, urlsafe_encode64) и декодирование (decode64, strict_decode64, urlsafe_decode64) двоичных данных с использованием Base64 представления.

Пример

Простое кодирование и декодирование.

require "base64"

enc   = Base64.encode64('Send reinforcements')
                    # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
plain = Base64.decode64(enc)
                    # -> "Send reinforcements"

Целью использования base64 для кодирования данных является преобразование любых двоичных данных в чисто печатные символы.

Методы публичного экземпляра

decode64(str) Показать исходный код
# File lib/base64.rb, line 58
def decode64(str)
  str.unpack1("m")
end

Возвращает декодированную версию Base64 str. Данный метод соответствует RFC 2045. Символы за пределами базового алфавита игнорируются.

require 'base64'
str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
      'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
      'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
puts Base64.decode64(str)

Генерирует:

This is line one
This is line two
This is line three
And so on...
encode64(bin) Показать исходный код
# File lib/base64.rb, line 38
def encode64(bin)
  [bin].pack("m")
end

Возвращает закодированную версию Base64 bin. Данный метод соответствует RFC 2045. Символы перевода строки добавляются к каждым 60 закодированным символам.

require 'base64'
Base64.encode64("Now is the time for all good coders\nto learn Ruby")

Генерирует:

Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
UnVieQ==
strict_decode64(str) Показать исходный код
# File lib/base64.rb, line 73
def strict_decode64(str)
  str.unpack1("m0")
end

Возвращает декодированную версию Base64 str. Данный метод соответствует RFC 4648. ArgumentError генерируется, если str некорректно дополнено или содержит неалфавитные символы. Обратите внимание, что CR или LF также отклоняются.

strict_encode64(bin) Показать исходный код
# File lib/base64.rb, line 65
def strict_encode64(bin)
  [bin].pack("m0")
end

Возвращает закодированную версию Base64 bin. Данный метод соответствует RFC 4648. Символы перевода строки не добавляются.

urlsafe_decode64(str) Показать исходный код
# File lib/base64.rb, line 98
def urlsafe_decode64(str)
  # NOTE: RFC 4648 does say nothing about unpadded input, but says that
  # "the excess pad characters MAY also be ignored", so it is inferred that
  # unpadded input is also acceptable.
  if !str.end_with?("=") && str.length % 4 != 0
    str = str.ljust((str.length + 3) & ~3, "=")
    str.tr!("-_", "+/")
  else
    str = str.tr("-_", "+/")
  end
  strict_decode64(str)
end

Возвращает декодированную версию Base64 str. Данный метод соответствует «Base 64 Encoding с безопасным для URL и имён файлов алфавитом» в RFC 4648. Алфавит использует «-» вместо «+» и «_» вместо «/».

Символ заполнения необязателен. Данный метод принимает как корректно дополненные, так и не дополненные входные данные. Обратите внимание, что он всё ещё отклоняет некорректно дополненные входные данные.

urlsafe_encode64(bin, padding: true) Показать исходный код
# File lib/base64.rb, line 83
def urlsafe_encode64(bin, padding: true)
  str = strict_encode64(bin)
  str.chomp!("==") or str.chomp!("=") unless padding
  str.tr!("+/", "-_")
  str
end

Возвращает закодированную версию Base64 bin. Данный метод соответствует «Base 64 Encoding с безопасным для URL и имён файлов алфавитом» в RFC 4648. Алфавит использует «-» вместо «+» и «_» вместо «/». Обратите внимание, что результат может всё ещё содержать «=». Вы можете убрать заполнение, установив padding в значение false.

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API