Ruby 2.0.0 String # Match ArgumentError: неверная последовательность байтов в UTF-8
Я вижу это много и не нашел изящного решения. Если пользовательский ввод содержит недопустимые байтовые последовательности, мне нужно, чтобы он не вызывал исключения. Например:
# @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
Было задано множество похожих вопросов, и в результате получается кодирование или принудительное кодирование строки. Однако ни один из них не работает для меня:
regex.match(@raw_response.force_encoding("UTF-8"))
ArgumentError: invalid byte sequence in UTF-8
или же
regex.match(@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?"))
ArgumentError: invalid byte sequence in UTF-8
Это ошибка в Ruby 2.0.0 или я что-то упустил?
Что странно, так это то, что кодирование выполняется правильно, но сопоставление продолжает вызывать исключение:
@raw_response.encode("UTF-8", :invalid=>:replace, :replace=>"?").encoding
=> #<Encoding:UTF-8>