- 更新日: 2014年12月26日
 - Ruby
 
invalid byte sequence in UTF-8にString#scrubで対応
スポンサーリンク
    
    
    
    
  Ruby でファイルをオープンして1行ずつ読み込んで、読み込んだ行を String#split で分割して… のような処理を実行したところ、”invalid byte sequence in UTF-8″ という例外エラーに遭遇しました。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
よくある以下のような処理です。ファイル中の各行を tab で split。
| 
					 1 2 3 4 5 6  | 
						File.open(file) do |f|   f.each_line do |line|     elements = line.chomp.split("\t")     # ...   end end  | 
					
これを実行したところ、ファイル中のUTF-8として不正なバイト列を含む行で、以下の例外エラーが発生しました。
| 
					 1 2 3  | 
						ArgumentError: invalid byte sequence in 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
ということで、コードを以下のように修正しました。
| 
					 1 2 3 4 5 6  | 
						File.open(file) do |f|   f.each_line do |line|     elements = line.scrub('?').chomp.split("\t")     # ...   end end  | 
					
不正なバイト列が ‘?’ という文字で置き換えられ、invalid byte sequence in UTF-8 エラーを回避できます。String#scrub 便利です。
- – 参考リンク –
 - Ruby の invalid byte sequence in UTF-8 例外を encode(“UTF-8”, “UTF-8”) で回避するのはおかしいよ、という話 – sonots:blog
 - Rubyでinvalid byte sequence in UTF-8 というエラーの対処方法は? – QA@IT
 
スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
      
      
      
    
>> 次の記事 : ToDo管理用のフォーマット済みテキストファイルを作成するRubyスクリプト
<< 前の記事 : ゆるふわな競技プログラミングWEBサービス yukicoder に挑戦してみた
- Ruby の関連記事
 - Gemの作り方(Ruby Gem)
 - ローカル開発中のgemをGemfileに書いてインストール
 - 熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
 - El Capitanでgemのnative extensionビルド失敗に対応
 - Rubyで親クラスから子クラスの定数を参照
 - MacabをRubyで使う
 - rbenv/ruby-buildでRuby最新バージョンをインストール
 - Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
 - 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
 - Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
 
- 1件のコメント
 

画像付き英語辞書 Imagict | 英単語をイメージで暗記





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