Rails 法文 rake db:seed 失败

stc · 2012年07月23日 · 最后由 stc 回复于 2012年07月25日 · 4639 次阅读

我有个 seed 文件 myseed.csv,内含法文,是 utf8 编码的,

>file myseed.csv
myseed.csv : UTF-8 Unicode English text

运行 rake db:seed 的时候会提示

incompatible character encodings: UTF-8 and ASCII-8BIT

寻帮助,谢谢先

文件顶部加

# encoding: UTF-8

@Rei 3ks, seed.rb 已经加了,没有作用。 csv 文件加不了,加了提示说格式不对。

Encoding.default_external = Encoding::UTF_8

#3 楼 @Saito 谢了,不过还是没用..悲剧,考虑直接用 sql 语句导了..

你的代码怎么写的啊 这么谁能猜出来问题在哪

sorry,附上代码

seed.rb

CSV.read(File.dirname(__FILE__) + "/seeds_data/myseed.csv",:headers => true).each do |row|
    MyClass.create(row.to_hash)
end  

数据 "m_id","e_id","geo","country","name","full_name" 3,1006332,"City","FR","Bagnols-en-Forêt","Bagnols-en-Forêt,Provence-Alpes-Côte d'Azur,France"

#6 楼 @stc 需要保证 csv 里面文件编码为 utf8, 可以先自己用 File.read 读出来,打印看是否正常。seed.rb 是不是 utf8 不重要。

#6 楼 @stc 用的 csv 还是 faster csv?

#7 楼 @hhuai csv 文件正确编码,在 seed.rb 文件里 p File.read(Rails.root.to_s + "/db/seeds_data/myseed.csv") 打印正常

#8 楼 @hooopo csv , seed.rb 里 require 'csv'

#10 楼 @stc 换成 faster csv 吧

#10 楼 @stc 那想知道一下异常的堆栈,是错在入库,还是错在 CSV 读取。

@Rei @Saito @hooopo @hhuai 谢谢各位了,今天查到原因了,csv 文件里存在部分非正常 utf-8 编码的字节,导致了这个问题。我目前

converter = Iconv.new 'UTF-8//IGNORE', 'UTF-8'
value = converter.iconv(value)

先处理过去了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号