我对此感到很困惑,也许这是Ruby 2.6.2中的错误。我有使用BOM编写为UTF-8的文件,因此我在使用以下文件:
filelist = Dir.entries(@input_dirname).join(' ')
filelist = filelist.split(' ').grep(/xml/)
filelist.each do |indfile|
filecontents_tmp = File.read("#{@input_dirname}/#{indfile}", :encoding =>'bom|utf-8')
puts filecontents_tmp
end
如果我在puts行上放置了一个调试断点,则将正确读取我的文件。如果我只运行简单的脚本,则会出现以下错误:
在“读取”中:ASCII不兼容的编码需要binmode(ArgumentError)
我很困惑为什么它可以在调试中工作,但不能在正常运行时工作。有想法吗?
答案 0 :(得分:0)
您是否曾尝试在运行文件时(而不是调试文件时)打印默认编码?有3种方法可以设置/更改Ruby中的编码(我知道),因此我想知道在运行文件和调试之间是否有所不同。您应该可以通过打印默认编码来分辨:TimeUnit.HOURS.toMillis(16)
。
关于实际解决该问题,我遇到了一个类似的问题,发现了这个答案,它是puts Encoding.default_external
通话的选项,add bin mode对我有用。