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

スポンサーリンク

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

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

よくある以下のような処理です。ファイル中の各行を 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は入門を超える内容で難しめです。
 
スポンサーリンク
  • 1件のコメント
  • Shigeru Fujii

    助かりました。ありがとうございます。

Leave Your Message!