Tôi có những 2 UTF-8 chuỗi:Ruby, vấn đề so sánh chuỗi với UTF-8 ký tự
a = "N\u01b0\u0303"
b = "N\u1eef"
Họ trông khá khác nhau nhưng đều giống nhau khi chúng được hiển thị:
irb(main):039:0> puts "#{a} - #{b}"
Nữ - Nữ
Phiên bản a là phiên bản tôi đã lưu trữ trong DB. Phiên bản b là phiên bản đến từ trình duyệt trong yêu cầu POST, tôi không biết tại sao trình duyệt gửi kết hợp khác nhau của các ký tự UTF8 và không xảy ra luôn, tôi không thể tạo lại sự cố trong môi trường dev của tôi, nó xảy ra trong sản xuất và theo tỷ lệ phần trăm của tổng số yêu cầu.
trường hợp là tôi cố gắng để so sánh cả trong số họ nhưng họ trở false
:
irb(main):035:0> a == b
=> false
Tôi đã thử những điều khác nhau như buộc mã hóa:
irb(main):022:0> c.force_encoding("UTF-8") == a.force_encoding("UTF-8")
=> false
Một thực tế thú vị là :
irb(main):005:0> a.chars
=> ["N", "ư", "̃"]
irb(main):006:0> b.chars
=> ["N", "ữ"]
Làm cách nào để tôi có thể so sánh các loại chuỗi này?
Bạn có nhận a và b từ cùng một trình duyệt và os không? Có vẻ như vấn đề hiển thị ký tự trình duyệt/nhân vật cụ thể đối với tôi. Có thể bạn có thể thử bảng thay thế điểm và sau đó thực hiện thay thế ngược. – Cyrill