Я пишу процедуру импорта для 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, кстати.
Есть какие-нибудь указатели о том, как это убрать?
Спасибо