Ruby: Как преобразовать строку в двоичный файл и записать его в файл - PullRequest
2 голосов
/ 21 октября 2009

Данные представляют собой строку 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 ]

8 голосов
/ 21 октября 2009
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, такого как File.open(arguments).some_method, вы пропускаете дескриптор файла.

3 голосов
/ 21 октября 2009

Попробуйте использовать двойные кавычки:

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

Затем сделайте, как предложил sepp2k.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...