2012-03-21 30 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, '' 
相關問題