2011-10-24 18 views
0

私はPostgreSQLでRails 3.1.0とRuby 1.9.2を使用しています。私は巨大なファイル(〜300MB)からデータを取得し、それをデータベースに入れたいと思います。 ここで私はトランザクションを使用します。Rails 3.1.0:互換性のない文字エンコーディング:ASCII-8BITとUTF-8

File.open("./public/data_to_parse/movies/movies.list").each do |line| 
    if line.match(/\t/) 
    title = line.scan(/^[^\t(]+/)[0] 
    title = title.strip if title 
    year = line.scan(/[^\t]+$/)[0] 
    year = year.strip if year 
    movie = Movie.find_or_create(title, year) 
    temp.push(movie) if movie 
    if temp.size == 10000 
     Movie.transaction do 
     temp.each { |t| t.save } 
     end  
     temp =[] 
    end 
    end 
end 

をしかし、私は生のSQL whith質量のインサートを使用してもパフォーマンスを向上させたい:

temp.push"(\'#{title}\', \'#{year}\')" if movie 
    if temp.size == 10000 
    sql = "INSERT INTO movies (title, year) VALUES #{temp.join(", ")}" 
    Movie.connection.execute(sql) 
    temp =[] 
    end 
end 

しかし、私はこのエラー「互換性のない文字エンコーディングがあります:ASCII-8BITとUTF-8を"私はactiverecordを使用しているとき、それはすべて大丈夫です。 ファイルにドイツ語のウムラウトなどの文字が含まれています。私はここからすべてRails 3 - (incompatible character encodings: UTF-8 and ASCII-8BIT):を試しましたが、それは私を助けません。

どこから来たのですか?

ありがとう、

答えて

2

解決済み。ファイルのエンコードに問題がありました。彼らはISO8859-1にあり、iconvでUTF-8に変換しました。

+0

ここでiconvを+1してください。 "iconv -f iso-8859-1 -t utf-8 YOURFILE> YOURFILE2&&MV YOURFILE2 YOURFILE"を選択してください。また、Google社員を追加するだけで、ダウンロードしたJavaScriptファイルでこれが発生しました。 –

関連する問題