Ruby 2.0.0 String # Match ArgumentError: secuencia de bytes no válida en UTF-8
Veo esto mucho y no he encontrado una solución elegante. Si la entrada del usuario contiene secuencias de bytes no válidas, necesito poder hacer que no genere una excepción. Por ejemplo:
# @raw_response comes from user and contains invalid UTF-8
# for example: @raw_response = "\xBF"
regex.match(@raw_response)
ArgumentError: invalid byte sequence in UTF-8
Se han hecho numerosas preguntas similares y el resultado parece estar codificando o forzando la codificación de la cadena. Sin embargo, ninguno de estos funciona para mí:
regex.match(@raw_response.force_encoding("UTF-8"))
ArgumentError: invalid byte sequence in UTF-8
o
regex.match(@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?"))
ArgumentError: invalid byte sequence in UTF-8
¿Es esto un error con Ruby 2.0.0 o me falta algo?
Lo extraño es que parece estar codificando correctamente, pero la coincidencia continúa generando una excepción:
@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?").encoding
=> #<Encoding:UTF-8>