invalid byte sequence in UTF-8にString#scrubで対応

Ruby でファイルをオープンして1行ずつ読み込んで、読み込んだ行を String#split で分割して… のような処理を実行したところ、”invalid byte sequence in UTF-8″ という例外エラーに遭遇しました。

スポンサーリンク

よくある以下のような処理です。ファイル中の各行を tab で split。

これを実行したところ、ファイル中のUTF-8として不正なバイト列を含む行で、以下の例外エラーが発生しました。

Ruby2.1.0から導入された String#scrub で解決

調べましたところ、Ruby 2.1.0から String#scrub という不正なバイト列を任意の文字列に置き換えるメソッドが使えます。String#scrub! という破壊的メソッドも用意されている。

Class: String (Ruby 2.1.0)
Ruby 2.1.0 に追加される不正なバイト列を除去する String#scrub の紹介 – sonots:blog

ということで、コードを以下のように修正しました。

不正なバイト列が ‘?’ という文字で置き換えられ、invalid byte sequence in UTF-8 エラーを回避できます。String#scrub 便利です。

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!