首页 > 解决方案 > ASCII 编码与正常运行不兼容,不在调试模式下

问题描述

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

我很困惑为什么这会在调试中起作用,但在正常运行时不起作用。想法?

标签: ruby

解决方案


您是否尝试过在运行文件而不是在调试文件时打印默认编码?有 3 种方法可以在 Ruby 中设置/更改编码(我知道),所以我想知道运行文件和调试是否有区别。您应该能够通过打印默认编码来判断:puts Encoding.default_external.

至于实际解决这个问题,我遇到了一个类似的问题,发现这个答案说添加 bin 模式作为File.open呼叫的一个选项,它对我有用。


推荐阅读