Не каждая байтовая последовательность является допустимой строкой Юникода. (или, точнее, UTF-8)
Например, ваша однобайтовая строка не является:
str = "\xa0"
str.encoding #=> #<Encoding:UTF-8>
str.valid_encoding? #=> false
str.codepoints # ArgumentError (invalid byte sequence in UTF-8)
Для работы с произвольной строкой вы установили ее кодировку двоичный / ASCII:
str = "\xa0".b # <-- note the .b
str.encoding #=> #<Encoding:ASCII-8BIT>
str.valid_encoding? #=> true
str.codepoints #=> [160]
, а также установить кодирование регулярного выражения в ASCII: (через модификатор n
)
str =~ /\xa0/n
#=> 0