Ruby:如何将字符串转换为二进制文件并将其写入文件

时间:2009-10-21 13:03:35

标签: ruby utf-8

数据是UTF-8字符串:

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

我已经尝试File.open("data.bz2", "wb").write(data.unpack('a*'))解压缩的各种变化没有成功。我只是获取文件中的字符串而不是字符串中的UTF-8编码二进制数据。

2 个答案:

答案 0 :(得分:8)

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将字符串作为参数,并且您有一个字符串。首先无需解压缩该字符串。您可以使用Array#pack转换数组,例如将数字转换为二进制字符串,然后可以将其写入文件。如果您已经有一个字符串,则无需打包。从文件(或任何地方)读取后,使用unpack将这样的二进制字符串转换回数组。

另请注意,如果在没有块的情况下使用File.open并且未保存File.open(arguments).some_method等文件对象,则会泄漏文件句柄。

答案 1 :(得分:3)

尝试使用双引号:

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

然后按照sepp2k建议做。