web-dev-qa-db-ja.com

UTF-8の無効なバイトシーケンス(ArgumentError)

Rubyスクリプトを実行しようとしていますが、次の行で常にエラーが発生します。

file_content.gsub(/dr/i,'med')

「dr」を「med」に置き換えようとしています。

エラーは次のとおりです。

program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)

なぜですか、この問題を修正するにはどうすればよいですか?

Ruby 2.2.1p85を使用して、MAC OS X Yosemiteマシンで作業しています。

17
Simplicity

おそらくあなたの文字列はUTF-8形式ではないので、

if ! file_content.valid_encoding?
  s = file_content.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8')
  s.gsub(/dr/i,'med')
end

Ruby 2.0.0 String#Match ArgumentError:UTF-8の無効なバイトシーケンス 」を参照してください。

20
jon snow