在RUBY中检测到隐藏的BOM字符时如何引发错误

时间:2017-06-15 02:54:58

标签: ruby-on-rails ruby regex utf-8 byte-order-mark

详细说明。我有一个文件,其中包含隐藏的BOM字符,如下所示

2225612 | 22225200240 | STACKOVERFLOW | HELPSDEVELOPERS - LINE 1 þÿ 2225612 | 22225200240 | KIRK | CAPTAIN - LINE 2 2225612 | 22225200240 |感谢þÿ | INADVANCE - LINE 3

现在我有脚本处理每一行。根据我的假设,必须处理第一行,因为它没有任何BOM字符。但是当第二行开始处理时,它应该引发错误,因为标识了BOM字符。不仅在行的开头,BOM字符可以在行中的任何位置。作为参考,突出显示的是BOM字符。

当我使用 gsub 使用正则表达式 / [^ [:print]] / 时,它会将空格或新行视为BOM字符。我只想要检测BOM字符。

任何人都可以编写脚本吗?在此先感谢你们

2 个答案:

答案 0 :(得分:0)

我认为这个正则表达式应该有效:

if line =~ /\xEF\xBB\xBF/   # If line contains BOM character
   fail "Line contains a BOM char!"
end

如果你有编码问题,可能有助于强制行和正则表达式为UTF-8,如下所示:

regexp = Regexp.new("\xEF\xBB\xBF".force_encoding("UTF-8"), Regexp::FIXEDENCODING)
if line.force_encoding("UTF-8") =~ regexp
  # ...

答案 1 :(得分:0)

您可以使用File.read方法指定编码。

File.read('your_file.txt', encoding: 'bom|utf-8')

File.readlines('your_file.txt', "r:utf-8")