Я вытаскиваю несколько RSS-каналов с YouTube, которые имеют недопустимый UTF8. Я могу создать аналогичную рубиновую строку, используя
bad_utf8 = "\u{61B36}"
bad_utf8.encoding # => #<Encoding:UTF-8>
bad_utf8.valid_encoding? # => true
Руби считает, что это правильная кодировка UTF-8, и я почти уверен, что это не так.
При разговоре с Mysql я получаю сообщение об ошибке вроде
require 'mysql2'
client = Mysql2::Client.new(:host => "localhost", :username => "root")
client.query("use test");
bad_utf8 = "\u{61B36}"
client.query("INSERT INTO utf8 VALUES ('#{moo}')")
# Incorrect string value: '\xF1\xA1\xAC\xB6' for column 'string' at row 1 (Mysql2::Error)
Как я могу обнаружить или исправить эти недопустимые типы кодировок, прежде чем отправлять их в MySQL?