文件名中的rubyzip和unicode字符

cmssoen2  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(86)

我正在用rubyzip gem和Zip::ZipOutputStream类创建zip归档文件,遇到了unicode字母(西里尔字母)的问题-在归档文件中,它们被表示为像????? ???? ??.doc这样的问号。rubyzip支持unicode吗?

ipakzgxi

ipakzgxi1#

我看了一下rubyzip方法,似乎rubyzip不能改变语言。它可能使用计算机的默认代码页。你可以像this例子中那样使用chilkat zip,除非你有chilkat无法满足的特定需求。

o75abkj4

o75abkj42#

您可以使用以下代码片段将UTF-8转换为CP437,其中包含一些unicode字符(仅几个)。Windows 7及更早版本假定文件名以CP 437编码。

# first normalize the string
normalized_filename = input.mb_chars.normalize.to_s
# then encode in cp437
filename_for_zip = normalized_filename.encode("cp437")
# add file to zip
zipfile.add(filename_for_zip, pdf_file)
bejyjqdl

bejyjqdl3#

你可以直接运行zip。

`cd yourfolder; zip archivename file1 file2`

注意具体的报价。我在Ubuntu上为西里尔文文件名工作,而rubyzip正在生成不可读文件名的存档。

kpbwa7wx

kpbwa7wx4#

这就是我的工作。在创建Zip文件之前设置此选项

Zip.force_entry_names_encoding = 'UTF-8'

我从https://github.com/rubyzip/rubyzip#non-ascii-names上得到了这个

相关问题