その他
    ホーム技術発信DoRuby【Ruby/Rails】Shift_JISなのかUTF-8なのかわからないCSVを開く【CSV】

    【Ruby/Rails】Shift_JISなのかUTF-8なのかわからないCSVを開く【CSV】

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    よくCSVを読み込む時にファイルのエンコードが違っていて読み込めず例外が発生することが多々あります。そこで例外発生を抑える方法を記述します。

    begin~rescueを使用してCSVを開く

    例外が起こるたびに次の方法で開いていくスタイル。

    def execute
      csv.each do |row|
        .
        .
        .
      end
    end
    
    private
    
    def csv
      begin
        @csv = CSV.foreach(file_path)
        @csv.first # UTF-8で開けなかったらここで例外が起こる
        @csv
      rescue
        CSV.new(open(file_path, 'rb:Shift_JIS:UTF-8', undef: :replace)) # Shift_JISのCSVを開く
      end
    rescue
      errors.add :base, '開けぬ...'
      raise
    end
    
    def file_path
    ...
    end