Как удалить 4 байта utf-8 символов в Ruby?

Так как MySQL utf8 не поддерживает 4 байтовых символа, я ищу способ обнаружения и устранения любых 4-байтовых символов utf8 из строки в Ruby. Я понимаю, что я могу обновить свою таблицу, чтобы использовать utf8m4, но по нескольким причинам, что невозможно или желаемое решение.

Простое кодирование строки в ASCII удалит эти символы, но также удалит все другие символы, отличные от ASCII, что не очень хорошо.

Ответы

Ответ 1

В Ruby 1.9.3 для меня работает следующее:

input.each_char.select{|c| c.bytes.count < 4 }.join('')

Например:

input = "hello \xF0\xA9\xB6\x98 world"                  # includes U+29D98
input.each_char.select{|c| c.bytes.count < 4 }.join('') # 'hello  world'