2017-06-15 11 views
0

詳細はこちらです。私は、以下に示すように隠されたBOM文字を含むファイルを持っているRUBYで隠されたBOM文字が検出された場合にエラーを発生させる方法

2225612 | 22225200240 | StackOverflowの| HELPSDEVELOPERS - LINE 1 THY 2225612 | 22225200240 | KIRK | CAPTAIN - LINE 2 2225612 | 22225200240 | THANKS THY | INADVANCE - LINE 3

ここで、各行が処理されるスクリプトがあります。私の前提として、最初の行はBOM文字を持たないので処理されなければなりません。しかし、2行目が処理を開始すると、BOM Characterが識別されるため、エラーが発生するはずです。行の冒頭では、BOM文字は行のどこにでも置くことができます。参考までに、強調表示されているものはBOM Characterです。

私は正規表現を使用する場合/[^ [:印刷]]それはBOM文字としてスペースや改行を検討しているGSUBを使用して/。 BOM文字だけを検出したい。

誰にでもこのスクリプトを書くことはできますか?おかげで事前みんな

答えて

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 
    # ... 
+0

こんにちはGinty、返信 –

+0

のおかげであなたはbreifのコードを見ることができ、ここで https://stackoverflow.com/questions/44559055/ruby-bom-characters - 検出が必要 –

+1

こんにちは@SivaAnilこれが問題の最初の部分を解決した場合は、回答を受け入れるべきです – Ginty

0

エンコードはFile.readメソッドで指定できます。

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

または

File.readlines('your_file.txt', "r:utf-8") 
関連する問題