Предположим, у вас есть строка типа "€foo\xA0"
, кодированная UTF-8. Есть ли способ удалить недопустимые последовательности байтов из этой строки? (так вы получите "€foo"
)
В ruby-1.8 вы могли бы использовать Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "€foo\xA0")
, но это устарело. "€foo\xA0".encode('UTF-8')
ничего не делает, так как это уже UTF-8. Я попробовал:
"€foo\xA0".force_encoding('BINARY').encode('UTF-8', :undef => :replace, :replace => '')
, что дает
"foo"
Но при этом также теряется действительный многобайтовый символ € 1015 *