Supongamos que tiene una cadena como "€foo\xA0"
, codificada UTF-8. ¿Hay alguna forma de eliminar las secuencias de bytes no válidas de esta cadena? (para que obtenga "€foo"
)¿Hay alguna manera en ruby 1.9 de eliminar secuencias inválidas de bytes de cadenas?
En ruby-1.8 puede usar Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "€foo\xA0")
pero eso ya no está disponible. "€foo\xA0".encode('UTF-8')
no hace nada, ya que ya es UTF-8. Probé:
"€foo\xA0".force_encoding('BINARY').encode('UTF-8', :undef => :replace, :replace => '')
que produce
"foo"
Pero eso también pierde el carácter de varios bytes válidos €
No elimina el '\ xF1' en esta cadena' "eEspa \ xF1a; FB" ' – Dorian
@Dorian, en la consola 1.9.3 IRB,' "eEspa \ xF1a; FB" .chars.select {| i | i.valid_encoding?}. join' returns '" eEspaa; FB "' ... ¿no tienes ese comportamiento o he malentendido? – acobster