#ruby
Вопрос:
Строка с одной стороны была получена в результате очистки сервера, поэтому они могут отличаться, но выглядят одинаково:
irb(main):013:0> "italy" == "italy"
=> false
Я проверил кодировку, и она такая же
irb(main):014:0> "italy".encoding === "italy".encoding
=> true
irb(main):016:0> "italy".encoding
=> #<Encoding:UTF-8>
Почему они разные (==) ?
Ответ №1:
Первая строка содержит МЕТКУ СЛЕВА НАПРАВО в начале. Это не видно при печати строки, но это означает, что строки разные. Сравните результат вызова bytes
или chars
по строкам.
Вам нужно будет снять его перед обработкой строки.
Комментарии:
1. Как вы его нашли? Какую функцию ruby или js я должен использовать, чтобы сделать их равными? Рассмотрим в качестве ссылки строку, написанную в консоли ruby.
2. @sparkle Я просто скопировал и вставил строки из вашего вопроса в консоль, назначив их переменным, затем вы можете исследовать. например , если вы скопируете первую строку в
a = "italy"
, тоa.chars
отобразится дополнительный символ как""
иa.codepoints
будет отображаться кодовая точка.3. хорошо, спасибо. Как я могу удалить этот дополнительный символ в ruby?
4.
"italy".encode!("ASCII", invalid: :replace, undef: :replace, replace: '')
5. Без «!» это тоже работает с нулем. В противном случае я получаю «не могу изменить замороженную строку: «»» ноль.to_s.кодировать! («ASCII», неверно: :заменить, не определено: :заменить, заменить: «)