Rails 3.1.0:不兼容的字符编码:ASCII-8BIT和UTF-8

时间:2011-10-24 11:10:06

标签: ruby-on-rails utf-8 encode rails-postgresql

我正在使用Rails 3.1.0和Ruby 1.9.2和PostgreSQL。我想从大文件(~300mb)中获取数据并将其放入数据库中。 在这里我使用交易:

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来提高性能:

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):,但它对我没有帮助。

你知道它来自哪里吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

解决。问题在于文件编码。他们在ISO_8859-1中,我通过iconv将其转换为UTF-8。