我有這2 UTF-8字符串:紅寶石,比較字符串使用UTF-8字符的問題
a = "N\u01b0\u0303"
b = "N\u1eef"
他們看起來很不同,但都是一樣的,一旦他們被渲染:
irb(main):039:0> puts "#{a} - #{b}"
Nữ - Nữ
a版本是我存儲在數據庫中的版本。 b版本是一個來自瀏覽器的POST請求,我不知道爲什麼瀏覽器發送的是UTF8字符的不同組合,而且它並不總是發生,我無法重現該問題。我的開發環境,它發生在生產中並佔總請求的一定比例。
的情況是,我試圖比較他們兩人,但他們返回false
:
irb(main):035:0> a == b
=> false
我已經試過像迫使編碼不同的東西:
irb(main):022:0> c.force_encoding("UTF-8") == a.force_encoding("UTF-8")
=> false
另一個有趣的事實是:
irb(main):005:0> a.chars
=> ["N", "ư", "̃"]
irb(main):006:0> b.chars
=> ["N", "ữ"]
如何比較這些字符串?
你從同一瀏覽器和操作系統獲得a和b嗎?看起來像特定的瀏覽器/操作系統字符渲染問題給我。 也許你可以嘗試點替換表,然後進行反向替換。 – Cyrill