我正在为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数据库,顺便说一句。
有关如何清理它的任何指示?
由于
答案 0 :(得分:0)
虽然多字节字符似乎有用,但我的gsub也出错了。这是允许导入所有122k记录的原因:
s[3].gsub! 34.chr, ''