2012-03-18 24 views
8

Tôi có sau dòng mã trong Ruby của tôi trên ứng dụng Rails, mà kiểm tra xem chuỗi cho trước chứa các ký tự Hàn Quốc hay không:RoR lớp nhân vật regex

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

Nó hoạt động hoàn hảo trong giao diện điều khiển, nhưng đặt ra một lỗi cú pháp cho ứng dụng thực tế:

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

Tôi thiếu gì và làm cách nào để hoạt động?

+0

là gì kết quả của '" # {RUBY_VERSION} -p # {RUBY_PATCHLEVEL} "' trong bảng điều khiển và trong ứng dụng? –

Trả lời

13

Đây là một vấn đề mã hóa ký tự, bạn cần phải thêm:.

# encoding: utf-8 

lên đỉnh Ruby nộp bạn đang sử dụng regex rằng trong Có lẽ bạn có thể sử dụng bất kỳ mã hóa mà tính chất giai cấp bạn' tái sử dụng tồn tại thay vì UTF-8 nếu bạn muốn. Lưu ý rằng trong Ruby 2.0, UTF-8 bây giờ là mặc định, vì vậy điều này không cần thiết trong Ruby 2.0+.

Điều này được gọi là "nhận xét ma thuật". Bạn có thể và nên đọc thêm về encoding in Ruby 1.9. Lưu ý rằng mã hóa trong quan điểm Rails được xử lý tự động bởi config.encoding (thiết lập để UTF-8 theo mặc định trong config/application.rb.

Nó được khả năng làm việc trong giao diện điều khiển bởi vì thiết bị đầu cuối của bạn được thiết lập để sử dụng UTF-8 rồi.

+1

Hoàn hảo, cảm ơn bạn. Đã đặt mã hóa mặc định thành UTF-8 trong 'application.rb', tôi đã mong đợi – Arnold

+2

@ArnoldSakhnov Yea rằng thiết lập chỉ áp dụng cho các khung nhìn (có lẽ vì Rails có thể thiết lập mã hóa khi nó hiển thị khung nhìn, nhưng Ruby là một tệp tải lớp, v.v ...) . –