2012-03-21 21 views
0

我正在为Geonames写一个导入例程。其中一列是我所假设的完整的UTF-8字符(中文,英文等)。如何让这些字符可以使用Ruby保存在Postgresql中?

无论如何,它在几个字符上崩溃。主要有:(请不要混淆")。

这里是我的代码:

class City < ActiveRecord::Base 
    set_table_name "geo_cities" 
end 

class Cities 
    class << self 
     def parse(file) 
      File.new(file).each_line do |line| 
       s = line.chomp.split("\t") 
       city = City.new 

       # remove ” and " 
       alternatenames = s[3].gsub(/\"/, "") 
       alternatenames = alternatenames.gsub("”", "") 
       alternatenames = '{' + alternatenames.split(/,/).map {|n| '"' + n + '"'}.join(",") + '}' 

       city.geonameid   = s[0] 
       city.name    = s[1] 
       city.asciiname   = s[2] 
       city.alternatenames  = alternatenames 
       city.latitude   = s[4] 
       city.longitude   = s[5] 
       city.featureclass  = s[6] 
       city.featurecode  = s[7] 
       city.countrycode  = s[8] 
       # city.cc2    = "{#{s[9]}}" 
       city.admin1code   = s[10] 
       city.admin2code   = s[11] 
       city.admin3code   = s[12] 
       city.admin4code   = s[13] 
       city.population   = s[14] 
       city.elevation   = s[15] 
       city.dem    = s[16] 
       city.timezone   = s[17] 
       city.modificationdate = Time.parse(s[18]) 

       yield city 
      end 
     end 
    end 
end 

我真的不排队我用GSUB,试图阻止进口破裂的方式。大多数似乎工作正常,但报价(和封闭报价)崩溃。

以下是错误:

invalid multibyte char (US-ASCII) (SyntaxError) 
/Users/cbmeeks/Dropbox/Projects/flockgeo/geonames/imports/models.rb:38: invalid multibyte char (US-ASCII) 
/Users/cbmeeks/Dropbox/Projects/flockgeo/geonames/imports/models.rb:38: syntax error,  unexpected $end, expecting ')' 
      alternatenames = alternatenames.gsub("”", "") 
                ^

这是进入一个PostgreSQL数据库,顺便说一句。

任何关于如何清理的指针?

感谢

+1

可能重复[红宝石1.9 - 无效的多字节字符(US-ASCII)(http://stackoverflow.com/questions/3678172/ruby-1- 9-invalid-multibyte-char-us-ascii) – 2012-03-21 03:32:37

+0

是的,关于这个问题的答案解决了这个问题。 – cbmeeks 2012-03-22 01:37:56

回答

0

虽然多字节字符似乎工作,我也在我GSUB有一个错误。这是允许的所有122K记录导入:

s[3].gsub! 34.chr, '' 
相关问题