現在、業務委託で飲食店コンサルのデータ収集のお手伝いを(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に変更したり、色々やりましたがほとんど意味なかったです。。笑
##ちなみにこれだけじゃエラー解決しなかった、、
最終的にはこんな感じのコードになりました↓
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にするとダブルクォートで囲ってないデータであれば、データ中に出てくるダブルクォートはパースできるようです。
これでなんとかエラーを起こさずにデータを引っ張てくることができました!
##最後まで読んでいただきありがとうございます!
日々学んだことをアウトプットしています!感想やご指摘などあればコメントいただけますと幸いです!