Как я могу разрешить сохранение этих символов в Postgresql с помощью Ruby? - PullRequest
0 голосов
/ 21 марта 2012

Я пишу процедуру импорта для 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 голосов
/ 22 марта 2012

Хотя многобайтовый символ, похоже, работал, у меня также была ошибка в моем gsub.Вот что позволило импортировать все 122 тыс. Записей:

s[3].gsub! 34.chr, ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...