2012-03-25 47 views
22

我收到兩個錯誤,都圍繞編碼和兩個相關。Ruby正則表達式錯誤:不兼容的編碼正則表達式匹配(ASCII -8位正則表達式與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。

回答

26

您的正則表達式正在被編譯爲ASCII-8BIT。

就在該文件的頂部添加編碼聲明的正則表達式聲明,其中:

# encoding: utf-8 

大功告成。現在,當Ruby解析你的代碼時,它會假定你使用的每一個文字(正則表達式,字符串等)都是用UTF-8編碼指定的。

更新:UTF-8現在是Ruby 2.0及更高版本的默認編碼。

+0

已停止了'編碼:: CompatibilityError'錯誤,但啓動的WEBrick時,我仍然得到'無效的Unicode Property'警告。 – Shpigford 2012-03-25 02:49:22

+2

正則表達式引擎在Ruby 1.9上發生了變化......我不知道你最初是怎麼指定'\ P'的,但現在它被用來匹配Unicode代碼點,並且它需要一個參數(比如'\ P {L}',以匹配任何非字母字符)。請參閱:http://www.regular-expressions.info/unicode.html – 2012-03-25 02:54:13

+0

我試圖匹配這個:':-P'或':P'(如在表情符號伸出舌頭)...我將如何現在呢? – Shpigford 2012-03-25 04:26:07

相關問題