次のような行を含む CSV ファイルがあります。
...,"Städtische Galerie im Lenbachhaus",...
次のように、FasterCSV gem を使用して Ruby 1.8 を使用しています。
FasterCSV.foreach(file, :encoding => 'u', :headers => :first_row) do |r|
as = ImportObject.create!(r.to_hash)
end
ほとんどの行では正常に機能しますが、これらの行では特殊文字を含むフィールドが切り捨てられるため、「St」がデータベースに保存されます。
私は $KCODE="u" を入れましたが、エンコードオプションの有無にかかわらず、役に立ちませんでした。
DBはMySQLです。
編集:
コードを Heroku (Postgres) にプッシュしようとしたところ、新しいエラーが発生しました。
2011-02-19T17:19:01-08:00 app[web.1]: ActiveRecord::StatementInvalid (PGError: エラー: "UTF8" をエンコードするための無効なバイト シーケンス: 0xe46474
2011-02-19T17:19:01-08:00 app[web.1]: ヒント: このエラーは、「client_encoding」によって制御される、サーバーが予期するエンコーディングとバイト シーケンスが一致しない場合にも発生する可能性があります。
2011-02-19T17:19:01-08:00 app[web.1]: : INSERT INTO "import_objects" (... "title", ...) VALUES (..., 'St?dtische Galerie im Lenbachhaus', ...) RETURNING "id"):
:(