Ruby1.9における文字コードエラー

Ruby

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')メソッドを使う。 読み込んだCSVUTF-8ですよと手動で認識させるわけである。

CSV.foreach("db/seeds/#{Rails.env}/csv/foo.csv") do |row|
row.each { |i|
  i.force_encoding('UTF-8') if i != nil
}

(以下略)

根本的な解決ではないが、とりあえずはこれでOK。