ASCII不兼容编码,正常运行,不在调试模式下

时间:2019-10-28 20:38:03

标签: ruby

我对此感到很困惑,也许这是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)

我很困惑为什么它可以在调试中工作,但不能在正常运行时工作。有想法吗?

1 个答案:

答案 0 :(得分:0)

您是否曾尝试在运行文件时(而不是调试文件时)打印默认编码?有3种方法可以设置/更改Ruby中的编码(我知道),因此我想知道在运行文件和调试之间是否有所不同。您应该可以通过打印默认编码来分辨:TimeUnit.HOURS.toMillis(16)

关于实际解决该问题,我遇到了一个类似的问题,发现了这个答案,它是puts Encoding.default_external通话的选项,add bin mode对我有用。