ruby - 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)
我很困惑为什么这会在调试中起作用,但在正常运行时不起作用。想法?
解决方案
您是否尝试过在运行文件而不是在调试文件时打印默认编码?有 3 种方法可以在 Ruby 中设置/更改编码(我知道),所以我想知道运行文件和调试是否有区别。您应该能够通过打印默认编码来判断:puts Encoding.default_external
.
至于实际解决这个问题,我遇到了一个类似的问题,发现这个答案说添加 bin 模式作为File.open
呼叫的一个选项,它对我有用。
推荐阅读
- javascript - 在 Javascript 中验证 Facebook signed_request 签名
- oracle - 在 Oracle 11g 中加载外部表数据
- python - Related Manager is empty in one direction but not the other
- r - 从 R 中的网站提取 JSON 响应
- c# - 在 C# 中将图像添加到对象列表中
- tfs - VS2017 使用同一帐户连接到 TFS 和 VSTS 问题
- python - 为什么我的代码在 kattis 中出现 valueerror?
- user-interface - 准备安装对话框中的自定义消息包装
- sql - 为 SQL Server 中没有子节点的每个 XML 节点创建一列
- java - getChildrenCount() 如何在后台工作?