Я використовую Рубі та Нокогірі, щоб викреслити дані зі застарілої системи клієнта.
Текст, який я отримую, містить символ торгової марки. Але коли я показую його на консолі або зберігаю його в базі даних, 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