С помощью zipruby очень просто создать ZIP-архив без записи на диск. Можно взять строки и добавить их в качестве записей архива и, наконец, получить весь архив в виде строки. Затем я могу отправить его в виде вложения веб-службе, которая ожидает такой архив. Это именно то, что мне нужно, за одним исключением: оказывается, файлы в архиве имеют кодировку US-ASCII, тогда как веб-сервис очень строго относится к файлам с кодировкой UTF-8.
Есть ли способ заставить zipruby (или какой-либо эквивалентный инструмент, хотя я не нашел его для Ruby, способного не использовать временные файлы) для кодирования этих записей архива как UTF-8?
zipped_data = ''
Zip::Archive.open_buffer zipped_data, Zip::CREATE do |archive|
archive.add_buffer 'file1.xml', xml1.encode('UTF-8')
archive.add_buffer 'file2.xml', xml2.encode('UTF-8')
end
Чтобы проверить, я записываю zipped_data
в файл, затем разархивирую, и тогда я очень хорошо вижу, что кодировка неверна:
$ file -bi file1.xml
application/xml; charset=us-ascii