5 votes

Ruby : Comment convertir une chaîne en binaire et l'écrire dans un fichier

Les données sont une chaîne UTF-8 :

data = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'

J'ai essayé File.open("data.bz2", "wb").write(data.unpack('a*')) avec toutes sortes de variations pour unpack mais je n'ai eu aucun succès. Je reçois simplement la chaîne dans le fichier et non pas les données binaires codées en UTF-8 dans la chaîne.

12voto

sepp2k Points 157757
data = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08"

File.open("data.bz2", "wb") do |f|
  f.write(data)
end

write prend une chaîne de caractères comme argument et vous avez une chaîne de caractères. Il n'est pas nécessaire de déballer cette chaîne en premier. Vous utilisez Array#pack pour convertir un tableau de par exemple des nombres en une chaîne binaire que vous pouvez ensuite écrire dans un fichier. Si vous avez déjà une chaîne, vous n'avez pas besoin de la déballer. Vous utilisez unpack pour convertir une telle chaîne binaire en un tableau après l'avoir lue à partir d'un fichier (ou d'ailleurs).

Remarquez également que lorsque vous utilisez File.open sans un block et sans sauvegarder l'objet File comme File.open(arguments).some_method, vous laissez fuiter un descripteur de fichier.

4voto

kgiannakakis Points 62727

Essayez d'utiliser des guillemets doubles :

data = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03"

Ensuite, faites comme suggéré par sepp2k.

1voto

Ulysse BN Points 2280

Une réponse plus générique pour les personnes venant d'Internet :

data = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03"

# écrire dans un fichier
File.write("chemin/vers/fichier", data, mode: "wb") # wb: write binary

# lire depuis un fichier
File.read("chemin/vers/fichier", mode: "rb") == data # rb: read binary

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