【问题标题】:How can I allow these characters to be saved in Postgresql using Ruby?如何使用 Ruby 将这些字符保存在 Postgresql 中?
【发布时间】: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


【解决方案1】:

虽然多字节字符似乎可以工作,但我的 gsub 中也有错误。这就是允许导入所有 122k 记录的原因:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2021-04-29
    相关资源
    最近更新 更多