Ошибка UTF-8 в Ruby - PullRequest
       2

Ошибка UTF-8 в Ruby

4 голосов
/ 03 декабря 2011

Я очищаю несколько веб-сайтов, и в конце концов я сталкиваюсь с ошибкой 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/. Но странно то, что когда я просматриваю его в своем веб-браузере, он не показывает забавные символы в источнике.

Что мне делать дальше?

1 Ответ

6 голосов
/ 03 декабря 2011

Проблема состоит в том, что ваша строка содержит символы не-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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...