如何使用Ruby将这些字符保存在Postgresql中?

时间:2012-03-21 02:59:46

标签: ruby postgresql utf-8 import

我正在为Geonames编写一个导入例程。其中一个列我假设是完整的UTF-8字符(中文,英文等)。

无论如何,它正在崩溃几个角色。主要是:(请不要与"混淆。)

这是我的代码:

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 个答案:

答案 0 :(得分:0)

虽然多字节字符似乎有用,但我的gsub也出错了。这是允许导入所有122k记录的原因:

s[3].gsub! 34.chr, ''