ruby - Ruby 中的 UTF-8 错误

标签 ruby encoding utf-8

我正在抓取一些网站,最终我遇到了一个 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 修订版 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/ .但奇怪的是,当我在网络浏览器中查看它时,它并没有显示源代码中的有趣符号。

接下来我该做什么?

最佳答案

问题是您的字符串包含非 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

关于ruby - Ruby 中的 UTF-8 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368835/

相关文章:

Jquery ajax 空格和&符号问题

带有特定关键字的Javascript编码方法

javascript:如何对包含短划线 (-) 的字符串进行 URL 编码?

c++ - 如何使 std::regex 匹配 Utf8

windows - Windows 记事本如何解释字符?

javascript - angular.js $http.get 如何强制使用 UTF-8 编码

ruby - 为什么在 ruby​​/rails/activerecord 中并不总是需要 self?

rubymine - 找不到 gem "jquery-rails"

ruby-on-rails - `*` 用作参数时的含义(不像*arg,只是*)

ruby-on-rails - Ruby 1.8.7 的段错误