ruby encoding character-encoding ruby-1.9 utf

¿Hay alguna forma en Ruby 1.9 para eliminar secuencias de bytes no válidas de las cadenas?



encoding character-encoding (4)

Supongamos que tiene una cadena como "€foo/xA0" , codificada en UTF-8. ¿Hay alguna forma de eliminar secuencias de bytes no válidas de esta cadena? (por lo que obtienes "€foo" )

En ruby-1.8, puedes usar Iconv.iconv(''UTF-8//IGNORE'', ''UTF-8'', "€foo/xA0") pero ahora está en desuso. "€foo/xA0".encode(''UTF-8'') no hace nada, ya que ya es UTF-8. Lo intenté:

"€foo/xA0".force_encoding(''BINARY'').encode(''UTF-8'', :undef => :replace, :replace => '''')

cuyos rendimientos

"foo"

Pero eso también pierde el carácter multibyte válido €


Ruby 2.0 y 1.9.3

"€foo/xA0".encode(Encoding::UTF_8, Encoding::UTF_8, :invalid => :replace)

Ruby 2.1+

"€foo/xA0".scrub


data = '''' if not (data.force_encoding("UTF-8").valid_encoding?)


"€foo/xA0".chars.select(&:valid_encoding?).join


"€foo/xA0".encode(''UTF-16le'', invalid: :replace, replace: '''').encode(''UTF-8'')