Ошибка регулярного выражения в Ruby: несовместимое совпадение регулярного выражения кодировки (регулярное выражение ASCII-8BIT со строкой UTF-8) - PullRequest
23 голосов
/ 25 марта 2012

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

Первая ошибка (технически, предупреждение), которую я получаю при запуске 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.

Ответы [ 2 ]

26 голосов
/ 25 марта 2012

Ваше регулярное выражение "компилируется" как ASCII-8BIT.

Просто добавьте объявление кодировки вверху файла, в котором объявлено регулярное выражение:

# encoding: utf-8

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

ОБНОВЛЕНИЕ: UTF-8 теперь является кодировкой по умолчанию для Ruby 2.0 и выше.

4 голосов
/ 10 марта 2015

Документ Ruby 2.0

/Pattern/u - stand for UTF-8
...