具有指定编码的ruby open pathname

时间:2014-04-20 04:59:12

标签: ruby encoding utf-8

我正在尝试打开文件,告诉Ruby 1.9.3将它们视为UTF-8编码。

require 'pathname'
Pathname.glob("/Users/Wes/Desktop/uf2/*.ics").each { |f|
  puts f.read(["encoding:UTF-8"])
}

类文档经历了几个间接层,所以我不确定我是否正确指定了编码。但是,当我尝试它时,我收到此错误消息

ICS_scanner_strucdoc.rb:4:在read': can't convert Array into Integer (TypeError) from ICS_scanner_strucdoc.rb:4:in中读取&#39;         来自ICS_scanner_strucdoc.rb:4:block in <main>' from ICS_scanner_strucdoc.rb:3:in每个&#39;         来自ICS_scanner_strucdoc.rb:3:在`&#39;

此错误消息让我相信read正在尝试将open_args解释为可选的前导参数,这将是读取的长度。

如果我将可选参数放入,如put f.read(100000,0,[&#34; encoding:UTF-8&#34;]),我收到一条错误消息,指出参数太多。

仅指定编码的适当方法是什么?说这是文档和类的行为之间的不一致是否正确?

Mac OS 10.8 rvm当前报道&#34; ruby​​-1.9.3-p484&#34;

1 个答案:

答案 0 :(得分:1)

我不确定您是否要为路径名或文件本身指定编码。

如果是后者,这可能是你想要的。

Pathname.glob("/Users/Wes/Desktop/uf2/*.ics").each { |f|
  puts File.open(f,"r:UTF-8")
}

使用Pathname.read,您可以这样写。

Pathname.glob("/Users/Wes/Desktop/uf2/*.ics").each do |f|
  path = Pathname(f)
  puts path.read
end