180 votes

Étrange \n en chaîne encodée en base64 en Ruby

La bibliothèque Base64 intégrée à Ruby ajoute quelques ' \n 's. Je ne parviens pas à en trouver la raison. Pour cet exemple particulier :

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"

El \n sont en dernière et 6ème position à partir de la fin. Le décodeur (Base64.decode64) renvoie l'ancienne chaîne parfaitement. Ce qui est étrange, c'est que ces \n n'ajoutent aucune valeur à la chaîne codée. Lorsque je supprime les nouvelles lignes de la chaîne de sortie, le décodeur la décode à nouveau parfaitement.

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

De plus, j'ai utilisé une autre bibliothèque JS pour produire la sortie encodée en base64 de la même chaîne d'entrée, la sortie ne contient pas les éléments suivants \n 's.

Est-ce un bug ou autre chose ? Quelqu'un a-t-il déjà été confronté à ce problème ?

FYI,

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

0 votes

Même problème bizarre ici

2voto

user1519240 Points 36

El \n ajouté lors de l'utilisation de Base64#encode64 est correct, consultez ce post : https://glaucocustodio.github.io/2014/09/27/a-reminder-about-base64encode64-in-ruby/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X