web-dev-qa-db-ja.com

Ruby正規表現エラー:互換性のないエンコーディング正規表現一致(UTF-8文字列を含むASCII-8BIT正規表現)

2つのエラーが発生します。どちらもエンコードを中心にしており、両方とも関連しています。

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。

23
Shpigford

RegexはASCII-8BITとして「コンパイル」されています。

Regexが宣言されているファイルの先頭にエンコーディング宣言を追加するだけです。

# encoding: utf-8

これで完了です。 Rubyがコードを解析しているとき、使用するすべてのリテラル(正規表現、文字列など)がUTF-8エンコーディングで指定されていると想定します。

更新:UTF-8がRuby 2.0以降)のデフォルトのエンコーディングになりました。

26
Fábio Batista

Ruby 2.0ドキュメント

/Pattern/u - stand for UTF-8
5
Nil Liu