Ruby1.9における文字コードエラー
UTF-8でかかれたCSVファイルを読み込んだときに
incompatible character encodings: ASCII-8BIT and UTF-8
というエラーが出る問題が出たので、解決法のメモです。
★症状
Ruby1.8+Rails2.2で動いていたseeds.rbをRuby1.9+Rails3.0に移植したら
incompatible character encodings: ASCII-8BIT and UTF-8
というエラーが出てrake:db seedsができなかった。
★原因
Ruby1.9での文字コードの扱いが変わったことによるエラー。 ユーザー側の原因ではない。
★解決法
force_encoding('UTF-8')メソッドを使う。 読み込んだCSVをUTF-8ですよと手動で認識させるわけである。
CSV.foreach("db/seeds/#{Rails.env}/csv/foo.csv") do |row| row.each { |i| i.force_encoding('UTF-8') if i != nil } (以下略)
根本的な解決ではないが、とりあえずはこれでOK。