【问题标题】:UTF-8 Error in RubyRuby 中的 UTF-8 错误
【发布时间】:2012-01-12 05:17:46
【问题描述】:

我正在抓取一些网站,最终遇到如下所示的 UTF-8 错误:

/usr/local/lib/ruby/gems/1.9.1/gems/dm-core-1.2.0/lib/dm-core/support/ext/blank.rb:19:in
`=~': invalid byte sequence in UTF-8 (ArgumentError)

现在,我不在乎网站是否 100% 准确。有没有一种方法可以获取我获得的页面并去除任何有问题的编码,然后在我的程序中传递它?

如果这很重要,我正在使用ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

更新:

def self.blank?(value)
      return value.blank? if value.respond_to?(:blank?)
      case value
      when ::NilClass, ::FalseClass
        true
      when ::TrueClass, ::Numeric
        false
      when ::Array, ::Hash
        value.empty?
      when ::String
        value !~ /\S/ ###This is the line 19 that has the issue.
      else
        value.nil? || (value.respond_to?(:empty?) && value.empty?)
      end
    end
  end

当我尝试保存以下行时:

What Happens in The Garage Tin Sign2. � � Newsletter Our monthly newsletter,

它抛出错误。它在页面上:http://www.stationbay.com/。但奇怪的是,当我在网络浏览器中查看它时,它并没有在源代码中显示有趣的符号。

接下来我该怎么做?

【问题讨论】:

  • 你能把编码的那行贴出来吗?
  • 这是你要求的吗?
  • 你到底传递了什么value?这可能是问题的根源。
  • 您的示例行工作正常(带有#encoding: UTF-8 magick 注释)。也许 Stack Overflow 会过滤掉无效字符?

标签: ruby encoding utf-8


【解决方案1】:

问题是您的字符串包含非 UTF-8 字符,但似乎强制使用 UTF-8 编码。以下短代码演示了该问题:

a = "\xff"
a.force_encoding "utf-8"
a.valid_encoding?  # returns false
a =~ /x/           # provokes ArgumentError: invalid byte sequence in UTF-8

解决此问题的最佳方法是从一开始就应用正确的编码。如果这不是一个选项,您可以使用String#encode

a = "\xff"
a.force_encoding "utf-8"
a.valid_encoding?  # returns false

a.encode!("utf-8", "utf-8", :invalid => :replace)
a.valid_encoding?  # returns true now
a ~= /x/           # works now

【讨论】:

  • 这回答了我正在处理的问题。谢谢!
  • @Sean:我只能重申这是一个丑陋的黑客,因为它会导致信息丢失。如果您可以选择从一开始就正确处理编码,那将是可行的方法。如果没有,那么欢迎你:)
  • 明白。我可能会在此应用程序中丢失数据,所以这对我来说不是问题。
  • @Niklas 这在 Rails 视图中不起作用有什么原因吗?
  • 在 ruby​​ 1.9、2.0 上:a.encode!("utf-8", "utf-8", :invalid => :replace) a.valid_encoding? # 仍然返回 FALSE
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多