Подтвердить что ты не робот

Ошибка Ruby Regex: несовместимое соответствие регулярному выражению кодировки (регулярное выражение ASCII-8BIT с строкой UTF-8)

Я получаю две ошибки, как вращающиеся вокруг кодировки, так и связанные.

Первая ошибка (технически, предупреждение), которую я получаю при запуске WEBrick:

/Users/USERNAME/example/config/initializers/bb-ruby.rb:54: warning: invalid Unicode Property \P: /\:\-?\P/

Линией, на которую он ссылается, является: /\:\-?\P/,

Это просто немного регулярное выражение, в конечном счете, часть этого блока:

@@tags['Razzing'] = [
  /\:\-?\P/,
  '<img src="/assets/emoticons/razzing.png">',
  'Razzing',
  ':P',
  :razzing]

Затем я также получаю следующую ошибку при анализе некоторых строк (предположительно из-за этой же строки)...

Encoding::CompatibilityError
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)

Я запускаю Ruby 1.9.2 и Rails 3.2.1.

4b9b3361

Ответ 1

Ваше Regex "компилируется" как ASCII-8BIT.

Просто добавьте объявление кодировки в начало файла, в котором объявлено Regex:

# encoding: utf-8

И все готово. Теперь, когда Ruby анализирует ваш код, он будет считать, что каждый литерал, который вы используете (Regex, String и т.д.), Указан в кодировке UTF-8.

UPDATE: UTF-8 теперь является кодировкой по умолчанию для Ruby 2.0 и выше.