Использование Ruby для создания ZIP-архивов, содержащих файлы в кодировке UTF-8, без использования файловой системы

С помощью 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

person Phil Hodgson    schedule 14.08.2012    source источник


Ответы (1)


Вероятно, это просто означает, что в файле нет многобайтовых символов, чтобы идентифицировать его как utf8. Другими словами, файл в кодировке utf8, содержащий только символы ascii, должен быть идентифицирован как ascii.

person pguardiario    schedule 15.08.2012
comment
Так оно и было. Спасибо. - person Phil Hodgson; 24.10.2012