Странный \n в base64 закодированная строка в Ruby

Встроенная библиотека Base64 в Ruby добавляет некоторый '\n. Я не могу узнать причину. Для этого специального примера:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'base64'
=> true
irb(main):003:0> str =  "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
=> "1110--ad6ca0b06e1fbeb7e6518a0418a73a6e04a67054"
irb(main):004:0> Base64.encode64(str)
=> "MTExMC0tYWQ2Y2EwYjA2ZTFmYmViN2U2NTE4YTA0MThhNzNhNmUwNGE2NzA1\nNA==\n"

\n в последнем и 6-м положении от конца. Декодер (Base64.decode64) возвращает назад старую строку отлично. Странная вещь, они, \n не добавляет значения к закодированной строке. Когда я удаляю новые строки из выходной строки, декодер декодирует ее снова отлично.

irb(main):005:0> Base64.decode64(Base64.encode64(str).gsub("\n", '')) == str
=> true

Больше из этого, я пользовался другой библиотекой JS для создания закодированного вывода base64 той же входной строки, вывод прибывает без \n.

Действительно ли это - ошибка или что-либо еще? Кто-либо столкнулся с этой проблемой прежде?

К ВАШЕМУ СВЕДЕНИЮ,

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
146
задан intellidiot 12 April 2010 в 09:30
поделиться

2 ответа

Изменить: Поскольку я написал этот ответ, был добавлен Base64.strict_encode64 () , который не добавляет новые строки.


Документы несколько сбивают с толку, метод b64encode должен добавлять новую строку для каждого 60-го символа, а в примере для метода encode64 фактически используется метод b64encode .

Похоже, что метод pack ("m") для класса Array, используемого encode64 , также добавляет новые строки. Я считаю ошибкой дизайна то, что это не является обязательным.

Вы можете удалить символы новой строки самостоятельно или, если вы используете rails, использовать ActiveSupport :: CoreExtensions :: Base64 :: Encoding с методом encode64s .

197
ответ дан 23 November 2019 в 22:42
поделиться

Ага, это нормально. В документе приведен пример, демонстрирующий разделение строк. base64 делает то же самое и на других языках (например, Python).

Причина, по которой новые строки без содержимого добавляются на этапе кодирования, заключается в том, что base64 изначально был разработан как механизм кодирования для отправки двоичного содержимого по электронной почте, где длина строки ограничена. Не стесняйтесь заменить их, если они вам не нужны.

9
ответ дан 23 November 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: