В этом случае to_html возвращает строку не-utf8.
У меня была такая же проблема с файлом, содержащим некоторые символы не-utf8.Исправление, которое я нашел, не очень красиво, но оно также может работать для вашего случая:
the_utf8_string = the_non_utf8_string.unpack('C*').pack('U*')
Будьте осторожны, я не уверен, что ни одна потеря данных не произошла.