2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】invalid multibyte char (UTF-8)エラーの解決方法【CSV】

Last updated at Posted at 2020-10-07

現在、業務委託で飲食店コンサルのデータ収集のお手伝いを(Railsアプリと、rubyのスクリプトで食べログをスクレイピング)しているのですが、文字エンコードでエラーが出て苦戦したのでここに解決方法を共有させて頂きます。

環境

  • Windows10 Pro
  • ruby 2.7.0

##エラーコード


SyntaxError ((irb):1: invalid multibyte char (UTF-8))

rubyのスクレイピングファイルをターミナルから実行したらこんなエラーが出ました。

どうやら文字コードが悪さをしてエラーが出ているようです。
Windowsはファイルを保存したときにデフォルトの文字コードがANSIというやつで、この文字コードをUTF-8に変えて保存する必要があります!

メモ帳を起動して、変更したいファイルをドラッグ&ドロップをして名前を付けて保存するときに文字コードをANSIからUTF-8(BOMは無しを推奨)に変えるだけです!
参考

全然プログラミング関係ない。。ww

スクリプトのコードをUTF-8からcp932に変更したり、色々やりましたがほとんど意味なかったです。。笑

##ちなみにこれだけじゃエラー解決しなかった、、

最終的にはこんな感じのコードになりました↓

scrp_tabelog.rb
CSV.open('new_log_file.csv', "w", liberal_parsing: true) do |csv|
  csv << ['契約順番号', '店舗名', '日付', '評価点数', '', '', '', '', '', '', '', 'クチコミ件数(件)', '行った人(人)', '行きたい人(人)']
  csv << ['', '', '', '総合', '夜', '昼', '料理・味', 'サービス', '雰囲気', 'CP', '酒・ドリンク']

  CSV.foreach('shop_point_list.csv', headers: false, liberal_parsing: true) do |recent_row|
    #処理を書く
  end
end

ここでののポイントは liberal_parsing: true です。
ruby 2.4.0 から、CSV に追加されたオプションで、これをtrueにするとダブルクォートで囲ってないデータであれば、データ中に出てくるダブルクォートはパースできるようです。

これでなんとかエラーを起こさずにデータを引っ張てくることができました!

##最後まで読んでいただきありがとうございます!
日々学んだことをアウトプットしています!感想やご指摘などあればコメントいただけますと幸いです!

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?