Ruby 1.8 có hỗ trợ kém đối với các chuỗi UTF-8. Bạn cần phải viết các byte riêng trong biểu thức chính quy, chứ không phải sau đó mã đầy đủ:
>> "acentuação".scan(/\xC3\xA7/)
=> ["ç"]
Để phù hợp với phạm vi mà bạn chỉ định các biểu hiện sẽ trở thành một chút phức tạp:
/([\x4E-\x9E][\x00-\xFF])|(\x9F[\x00-\xA5])/ # (untested)
That will be improved in Ruby 1.9, mặc dù.
Chỉnh sửa: Như đã lưu ý trong các nhận xét, các ký tự unicode \ u4E00- \ u9FA5 chỉ ánh xạ tới biểu thức ở trên trong mã hóa UTF16-BE. Mã hóa UTF8 có thể khác nhau. Vì vậy, bạn cần phải phân tích ánh xạ cẩn thận và xem liệu bạn có thể đưa ra một biểu thức phù hợp với byte cho Ruby 1.8 không.
Nguồn
2008-11-02 12:36:03
Regex mà bạn đánh dấu là "chưa được kiểm tra" chắc chắn không tương đương với [\ u4e00- \ u9FA5] khi xử lý văn bản UTF-8 với công cụ regex 8 bit chẳng hạn như công cụ trong Ruby 1.8. Regex của bạn sẽ chỉ hoạt động khi xử lý văn bản UTF-16BE với công cụ regex 8 bit. –