Ruby 2.0.0 String # Match ArgumentError: sequência de bytes inválida no UTF-8
Eu vejo muito isso e não descobri uma solução elegante. Se a entrada do usuário contiver seqüências de bytes inválidas, eu preciso poder gerar uma exceção. Por exemplo:
# @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
Inúmeras perguntas semelhantes foram feitas e o resultado parece estar codificando ou forçando a codificar a string. Nenhum desses trabalhos para mim, no entanto:
regex.match(@raw_response.force_encoding("UTF-8"))
ArgumentError: invalid byte sequence in UTF-8
ou
regex.match(@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?"))
ArgumentError: invalid byte sequence in UTF-8
Isso é um bug do Ruby 2.0.0 ou estou faltando alguma coisa?
O que é estranho é que parece estar codificando corretamente, mas a correspondência continua a gerar uma exceção:
@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?").encoding
=> #<Encoding:UTF-8>