Ответ 1
irb(main):001:0> d = "foo\u00A0\bar"
=> "foo \bar"
irb(main):002:0> d.gsub("\u00A0", "")
=> "foo\bar"
У меня есть строка, которая выглядит так:
d = "foo\u00A0\bar"
Когда я проверяю длину, он говорит, что это 7 символов. Я проверил онлайн и узнал, что это незаменимое пространство. Может ли кто-нибудь показать мне, как удалить все неразрывные пробелы в строке?
irb(main):001:0> d = "foo\u00A0\bar"
=> "foo \bar"
irb(main):002:0> d.gsub("\u00A0", "")
=> "foo\bar"
Если вы не заботитесь о нераспространяющемся пространстве конкретно, но о любом "специальном" символе пробела unicode, который может появиться в вашей строке, вы можете заменить его с помощью выражения скобки POSIX для пробелов:
s.gsub(/[[:space:]]/, '')
Эти выражения в скобках (в отличие от таких элементов, как \s
) не только соответствуют символам ASCII, но и всем символам юникода класса.
Подробнее см. рубиновую документацию
d.gsub("\u00A0", "")
не работает в Ruby 1.8. Вместо этого используйте d.gsub(/\302\240/,"")
Смотрите http://blog.grayproductions.net/articles/understanding_m17n для большего количества символов в разностях кодировки символов между 1,8 и 1,9.
Это старая нить, но, возможно, это помогает кому-то.
Я обнаружил, что искал решение той же проблемы, когда обнаружил, что полоса не выполняет эту работу. Я проверил с помощью метода ord
, какой символ был и использовался chr
, чтобы представить его в gsub
2.2.3 :010 > 160.chr("UTF-8")
=> " "
2.2.3 :011 > 160.chr("UTF-8").strip
=> " "
2.2.3 :012 > nbsp = 160.chr("UTF-8")
=> " "
2.2.3 :013 > nbsp.gsub(160.chr("UTF-8"),"")
=> ""
Я не мог понять, почему strip
не удаляет что-то вроде пространства для меня, поэтому я проверил здесь, что ASCII 160 на самом деле есть.