Я вижу это много и не понял изящного решения. Если пользовательский ввод содержит неверные последовательности байтов, я должен иметь возможность не создавать исключение. Например:
# @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>