2013-05-18 3 views
1

Я пытаюсь использовать метод squish, чтобы уменьшить несколько пробелов в строке до отдельных пробелов. Тем не менее, у меня есть строка с несколькими пробелами, которые не уменьшаются. Когда я проверяю string[space_position].blank?, он возвращает true, но его ни пуст, ни делает это == ' '.Строка .blank? но ни пустые, ни пробелы

Что может вызывать такое поведение?

Не уверен, что это относится к делу, но строка взята из mongoDB и была сохранена там с помощью Locomotive CMS.

+0

Можете ли вы добавить 1) строку перед вызовом метода 2) утверждает, что вы вызываете метод с 3) что вы ожидаете? Это поставит вопрос немного яснее. – Puhlze

+0

@Puhlze 1) Строка выглядит примерно так: 'string =" sth: Sth "'. 2) Какой метод вы имеете в виду? Я просто вызываю string.squish, никаких аргументов. 3) Я ожидал бы squish для вывода '' sth: Sth "' и 'string [6] == ''', чтобы быть правдой. – Cornflex

+0

В первом примере кода моего предыдущего комментария есть фактически 3 пробела между двоеточием и S. – Cornflex

ответ

2

the three spaces: [32,160,32]

ASCII 160 является non breaking space обычно находится в HTML, и, видимо, не признается squish как пространство. Попробуйте заменить его до:

string.gsub(160.chr, ' ').squish 
+0

Очень умный, спасибо. Однако я получаю ошибку кодирования ('Encoding :: CompatibilityError: несовместимое соответствие регулярному выражению кодировки (ASCII-8BIT regexp с строкой UTF-8)'). Я добавил «# encoding: utf-8' в верхней части файла. Есть идеи? – Cornflex

+0

он работает для меня в консоли (1.9.3). Попробуйте с помощью '' \ xA0' "или проверьте http://stackoverflow.com/questions/1942148/ruby-1-9-regular-expressions-with-unknown-input-encoding – tokland

+0

Извините, я не работал в то время как. К сожалению, проблема все еще сохраняется. Я не понимаю, как должна помочь ваша ссылка? 'string.count ('\ xA0')' возвращает 13 в моем примере. Однако, когда я вызываю 'string.gsub! ('\ XA0'), возвращается значение nil, что означает, что ничего не заменяется. Weird. – Cornflex

0
string.squish! 

Это может изменить сама строка. Кроме того, любая пустая строка типа "" .blank? вернет true.

+0

Это не меняет выход для меня. – Cornflex

Смежные вопросы