使用Ruby在不使用文件系统的情况下创建包含UTF-8编码“文件”的ZIP存档

时间:2012-08-14 13:36:34

标签: ruby xml utf-8 zip rubyzip

使用zipruby创建ZIP存档非常容易,无需写入磁盘。可以将字符串添加为存档条目,最后将整个存档作为字符串。然后,我可以将其作为附件发送到期望此类存档的Web服务。这正是我需要的一个例外:事实证明档案中的文件是US-ASCII编码,而Web服务对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

1 个答案:

答案 0 :(得分:2)

这可能只意味着文件中没有多字节字符将其标识为utf8。换句话说,其中只包含ascii字符的utf8编码文件应标识为ascii。