Как удалить из строки ruby символы, не являющиеся символами UTF8? У меня есть строка, в которой есть, например, "xC2". Я хочу удалить этот символ из строки, чтобы она стала правильной UTF8.
Это:
text.gsub!(/\xC2/, '')
возвращает ошибку:
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
Я искал text.unpack('U*') и string.pack, но ничего не добился.
Вы можете использовать кодирование для этого. текст.кодирование('кодировка UTF-8', :неверный => :заменить :фдоон => :замены)`
Подробнее смотрите в рубиново-дальше
Вы можете сделать это следующим образом
# encoding: utf-8
class String
def validate_encoding
chars.select(&:valid_encoding?).join
end
end
puts "testing\xC2 a non UTF-8 string".validate_encoding
#=>testing a non UTF-8 string
Вы можете использовать /n
, как в примере
text.gsub!(/\xC2/n, '')
чтобы заставить Regexp работать с байтами.
Вы уверены, что это то, что вам нужно? Любой символ Unicode в диапазоне [U+80, U+BF] будет иметь \xC2
в кодировке UTF-8.
Попробуйте Iconv
1.9.3p194 :001 > require 'iconv'
# => true
1.9.3p194 :002 > string = "testing\xC2 a non UTF-8 string"
# => "testing\xC2 a non UTF-8 string"
1.9.3p194 :003 > ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
# => #<Iconv:0x000000026c9290>
1.9.3p194 :004 > ic.iconv string
# => "testing a non UTF-8 string"
Вы текст в ASCII-8 бит кодирование, вместо этого вы должны использовать это:
String.delete!("^\u{0000}-\u{007F}");
Он будет служить той же цели.
Лучшее решение этой проблемы, что я'вэ нашел ответа на один и тот же вопрос: https://stackoverflow.com/a/8711118/363293.
Короче говоря: " и€ФОО\xA0-то".чарс.выберите(&:valid_encoding?).присоединяйтесь к