Ruby on rails 使用Roo打开带有嵌入空格的文件名

Ruby on rails 使用Roo打开带有嵌入空格的文件名,ruby-on-rails,ruby,filenames,Ruby On Rails,Ruby,Filenames,Ruby 2.0.0、Rails 4.0.3、Windows 8.1更新、Roo 1.13.2 我正在尝试使用Roo打开一个带有嵌入空格的Excel电子表格。到目前为止,我无法做到这一点。我真的不知道这个问题是否仅限于Roo。如果我重命名它以消除空格,我就没有问题了。我试着对它进行编码,但它只是说该文件不存在。当文件包含空格时,我可以打开它吗 代码示例: exceptions = [URI::InvalidURIError, IOError] puts "f is #{f}" put

Ruby 2.0.0、Rails 4.0.3、Windows 8.1更新、Roo 1.13.2

我正在尝试使用Roo打开一个带有嵌入空格的Excel电子表格。到目前为止,我无法做到这一点。我真的不知道这个问题是否仅限于Roo。如果我重命名它以消除空格,我就没有问题了。我试着对它进行编码,但它只是说该文件不存在。当文件包含空格时,我可以打开它吗

代码示例:

  exceptions = [URI::InvalidURIError, IOError]
  puts "f is #{f}"
  puts "f exist? #{File.exist?(f)}"
  begin
    xls = Roo::Spreadsheet.open(f)
  rescue *exceptions => e
    puts e.message
  end

  encoded_f = URI.encode(f).to_s
  puts "encoded_f is #{encoded_f}"
  puts "encoded_f exist? #{File.exist?(encoded_f)}"
  begin
    xls = Roo::Spreadsheet.open(encoded_f)
  rescue *exceptions => e
    puts e.message
  end

  gsub_f = f.gsub(" ", "") # Rename file without spaces
  File.rename(f, gsub_f)
  puts "gsub_f is #{gsub_f}"
  puts "gsub_f exist? #{File.exist?(gsub_f)}"
  begin
    xls = Roo::Spreadsheet.open(gsub_f)
  rescue *exceptions => e
    puts e.message
  end
输出样本:

f is Whitt Report 2014-07-28-0803.xls
f exist? true
bad URI(is not URI?): Whitt Report 2014-07-28-0803.xls

encoded_f is Whitt%20Report%202014-07-28-0803.xls
encoded_f exist? false
file Whitt%20Report%202014-07-28-0803.xls does not exist

gsub_f is WhittReport2014-07-28-0803.xls
gsub_f exist? true

最后没有给出任何消息,因为文件打开成功。

这是由于在
Roo::Spreadsheet#open
方法中调用URI模块的方式造成的


我发布了此问题的修复程序,现已合并。如果你更新了你的Roo gem,你就不会再有这个问题了。

我以为这已经解决了,但进一步的测试表明我错了。我想确认我有更新。查看存储库,我看不出应该检查什么。你能给我指一下那个方向吗?谢谢。我想在我得到一个解决方案之前,我得把这个问题留着。