2012-03-18 19 views
8

Mam następujący wiersz kodu w moim Ruby on Rails aplikacji, który sprawdza, czy dany ciąg zawiera koreańskich znaków czy nie:RoR klasa znaków regex

isKorean = !/\p{Hangul}/.match(word).nil? 

To działa doskonale w konsoli, ale podnosi błąd składni dla rzeczywistej aplikacji:

invalid character property name {Hangul}: /\p{Hangul}/ 

Co mi brakuje i jak mogę zmusić go do pracy?

+0

Co jest wynik "# {RUBY_VERSION} -p # {RUBY_PATCHLEVEL}" 'w konsoli i aplikacji? –

Odpowiedz

13

Jest to kwestia kodowania znaków, trzeba dodać.

# encoding: utf-8 

do góry Ruby złożyć używasz tego regex w Prawdopodobnie można użyć dowolnego kodowanie, że klasa postaci you” ponowne użycie istnieje w miejsce UTF-8, jeśli chcesz. Zauważ, że w Ruby 2.0, UTF-8 jest teraz domyślny, więc nie jest to potrzebne w Ruby 2.0+.

Jest to znane jako "magiczny komentarz". Możesz i powinieneś przeczytać więcej na temat encoding in Ruby 1.9. Należy pamiętać, że kodowania w szynach widoki są obsługiwane automatycznie przez config.encoding (ustawiony na UTF-8 domyślnie w config/application.rb.

Został prawdopodobnie pracuje w konsoli, ponieważ terminal jest skonfigurowany do korzystania z UTF-8.

+1

Doskonałe, dziękuję. Po ustawieniu domyślnego kodowania na UTF-8 w' application.rb', spodziewałem się to działa w całej aplikacji. Okazuje się, myliłem się. – Arnold

+2

@ArnoldSakhnov Tak, to ustawienie dotyczy tylko widoków (prawdopodobnie dlatego, że Railsy mogą ustawiać kodowanie, gdy renderuje widok, ale Ruby to jeden ładujący plik klasy itp.) . –

Powiązane problemy