2012-03-25 11 views
22

Otrzymuję dwa błędy, oba dotyczą kodu i obydwu powiązanych.Błąd Regex Regex: niezgodne dopasowanie regexp kodowania (wyrażenie regularne ASCII-8BIT z ciągiem znaków UTF-8)

Pierwszy błąd (technicznie, ostrzeżenie) uzyskać podczas uruchamiania serwer WEBrick:

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

Linia to powołując się jest: /\:\-?\P/,

To tylko trochę regex, ostatecznie częścią tego blok:

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

Wtedy też pojawia się następujący błąd podczas analizowania niektóre ciągi (prawdopodobnie z powodu tej samej linii) ...

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

Używam Ruby 1.9.2 i Rails 3.2.1.

Odpowiedz

26

Twój Regex jest "kompilowany" jako ASCII-8BIT.

Wystarczy dodać deklarację kodowania w górnej części pliku, w którym regex jest zadeklarowana:

# encoding: utf-8 

I gotowe. Teraz, gdy Ruby analizuje twój kod, zakłada, że ​​każdy używany literał (Regex, String, itp.) Jest określony w kodowaniu UTF-8.

AKTUALIZACJA:UTF-8 jest teraz domyślnym kodowaniem dla Ruby 2.0 i późniejszych.

+0

To zatrzymał 'błąd Kodowanie :: CompatibilityError', ale nadal jestem coraz' nieprawidłowy ostrzeżenia Property' Unicode podczas uruchamiania WEBrick. – Shpigford

+2

Silnik Regex został zmieniony na Ruby 1.9 ... Nie wiem, co miałeś na myśli przez '\ P' pierwotnie, ale teraz jest używany do dopasowywania punktów kodowych Unicode i wymaga parametru (np.' \ P {L} ', aby dopasować dowolny znak nie będący literą). Zobacz: http://www.regular-expressions.info/unicode.html –

+0

Próbuję dopasować to: ': -P' lub': P' (jak w emoticon wystaje język) ... jak bym zrób to teraz? – Shpigford

Powiązane problemy