详细说明。我有一个文件,其中包含隐藏的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字符。
任何人都可以编写脚本吗?在此先感谢你们
答案 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")