【发布时间】:2016-01-08 17:25:36
【问题描述】:
我正在用 ruby 编写一个小程序,它实质上会更改 zip 文件中的一些文件。 zip 文件在命令行中指定为参数并通过OptionParser 进行解释。
问题是,当指定一个包含非ASCII字符的文件时,该文件无法打开,说找不到。 Windows下使用cmd.exe会出现这个问题。
这是一个最小的例子:
# example.rb
require "zip"
require "optparse"
zip_file_name = String.new
# read and interprete command line arguments:
OptionParser.new do |opts|
opts.on("-f", "--file FILE", String, "The zip-file, which will be modified") do |f|
zip_file_name = f
end
end.parse!
# Open the zip file:
Zip::File.open(zip_file_name) do |zipfile|
end
如果您创建一个 zip 文件 test.zip 并运行 example.rb -f test.zip 一切正常(它确实完成且没有错误)。对 zip 文件 täst.zip 执行相同操作会给我一个错误。我试过zip_file_name.encode!(Encoding::UTF_8),但这并没有解决问题。
这似乎是一个编码问题(zip_file_name 的编码是 cp850)但转码似乎无法正常工作。
所以我的问题是:如何更改我的程序以允许非 ascii 字符在命令行上指定文件?
【问题讨论】: