/ / Дивні символи повертаються після вискоблювання екрана за допомогою Ruby / Nokogiri? - рубін, зачистка екрану, нокогірі

Чудові символи, отримані після екранного скреблення за допомогою Ruby / Nokogiri? - рубій, скрип-скребком, нукогірі

Я використовую Рубі та Нокогірі, щоб викреслити дані зі застарілої системи клієнта.

Текст, який я отримую, містить символ торгової марки. Але коли я показую його на консолі або зберігаю його в базі даних, TM перетворюється на інший символ.

Diet™ ПОТРІБНО Dietâ¢

Я майже впевнений, що це просто проблема кодування, і я впевнений, що у Рубі є простий спосіб впоратися з цим, але після декількох хвилин гуглінгу та спробу декількох очевидних варіантів я не ближче.

Спасибі заздалегідь!

Відповіді:

1 для відповіді № 1

У вас невідповідність кодування, але ви не сказали нам достатньо, щоб допомогти вам.

Що потрібно перевірити:

  • Про яке кодування говорить сервер на їхній сторінці? Це буде у повернених заголовках HTTPD.
  • Чи документ ДІЙСНО закодовані, як каже сервер, чи є символи, які не є в цьому кодовому наборі?

Як правило, ви отримаєте документи у вигляді utf-8, ISO-8859-1 або Win-1252, тому спробуйте використовувати ці значення, щоб дати підказку Nokogiri. Документація для Nokogiri::HTML.parse каже:

parse(thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block)

Де:

кодування - це кодування, яке слід використовувати при обробці документа.

Один із способів з'ясувати, що сервер надсилає назад:

require "open-uri"
open("http://www.example.net") { |io| io.charset }
# => "iso-8859-1"

Увага: Те, що сервер надсилає назад, не обов'язково є тим, що є вмістом насправді, тому це лише попередня підказка. Повернутий документ може бути будь-чим, і в цей момент ви самостійно розберетеся, що це таке.

Зазвичай ми використовуємо Nokogiri::HTML("some html to parse"), але ви можете використовувати:

Nokogiri::HTML("some html to parse", nil, "utf-8")

Подивіться на кодування Ruby 's, щоб зрозуміти, які наявні набори кодів:

Encoding.constants