指定した文字が何個はいっているか

def count_string(file, str)
  File.open(file, "r:Shift_JIS:UTF-8") do |io|
    count = 0
    io.each do |line|
      while line.include?(str)
        line.sub!(/#{str}/, "")
        count += 1
      end
    end
    return count
  end
end
puts count_string("count_string.txt", "事件")

Ruby書きたくなり作ってみました。指定した文字が何個あるか知るものです。
例では、count_string.txt というファイルの中に、事件 という言葉が何個入っているか調べます。

これだけのものですが、つまずいたところをメモします。
まずいきなり無限ループになったぽい。
調べてみると、line.sub!(/#{str}/, “”) を最初 line.sub!(/str/, “”)と書いていたのでした。
続いて、ファイルに日本語書くとエラーに。
これは、エンコーディングかいたらOKに。=> "r:Shift_JIS:UTF-8"
外部エンコーディングSJIS、内部エンコーディングUTF-8