Ошибка 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.
Ответы
Ответ 1
Ваше Regex "компилируется" как ASCII-8BIT.
Просто добавьте объявление кодировки в начало файла, в котором объявлено Regex:
# encoding: utf-8
И все готово. Теперь, когда Ruby анализирует ваш код, он будет считать, что каждый литерал, который вы используете (Regex, String и т.д.), Указан в кодировке UTF-8.
UPDATE: UTF-8
теперь является кодировкой по умолчанию для Ruby 2.0 и выше.
Ответ 2
Документ Ruby 2.0
/Pattern/u - stand for UTF-8