С небольшой помощью @masakielastic я решил эту проблему для своих личных целей, используя метод #chars.
Хитрость заключается в том, чтобы разбить каждый символ на свой отдельный отдельный блок , чтобы ruby мог завершиться с ошибкой .
Ruby требует сбой при столкновении с двоичным кодом и т. д.идти вперед и потерпеть неудачу, это трудный путь, когда дело доходит до этого материала.Поэтому я использую метод String # chars, чтобы разбить данную строку на массив символов.Затем я передаю этот код в метод очистки, который позволяет коду иметь «микроотказы» (мой чекан) внутри строки.
Итак, учитывая «грязную» строку, допустим, вы использовали File#read
накартина.(мой случай)
dirty = File.open(filepath).read
clean_chars = dirty.chars.select do |c|
begin
num_or_letter?(c)
rescue ArgumentError
next
end
end
clean = clean_chars.join("")
def num_or_letter?(char)
if char =~ /[a-zA-Z0-9]/
true
elsif char =~ Regexp.union(" ", ".", "?", "-", "+", "/", ",", "(", ")")
true
end
end
разрешение кода на сбой где-то в процессе, кажется, лучший способ пройти через него.Пока вы храните эти сбои в блоках, вы можете захватывать то, что доступно для чтения только в UTF-8-принимающих частях ruby