【发布时间】:2012-04-05 14:00:42
【问题描述】:
我正在为 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 数据库。
关于如何清理它的任何指示?
谢谢
【问题讨论】:
-
是的,这个问题的答案解决了这个问题。
标签: ruby postgresql utf-8 import