ho queste 2 stringhe UTF-8:Rubino, problemi che confrontano le stringhe con caratteri UTF-8
a = "N\u01b0\u0303"
b = "N\u1eef"
Hanno un aspetto piuttosto diverso, ma lo sono lo stesso una volta che vengono resi:
irb(main):039:0> puts "#{a} - #{b}"
Nữ - Nữ
La versione a è quella che ho memorizzato nel DB. La versione b è quella che viene dal browser in una richiesta POST, non so perché il browser sta inviando una combinazione diversa di caratteri UTF8, e non sta succedendo sempre, non posso riprodurre il problema in il mio ambiente di sviluppo, avviene in produzione e in una percentuale delle richieste totali.
il caso è che cerco di confrontare entrambi, ma ritornano false
:
irb(main):035:0> a == b
=> false
ho provato cose diverse, come costringendo codifica:
irb(main):022:0> c.force_encoding("UTF-8") == a.force_encoding("UTF-8")
=> false
Un altro fatto interessante è :
irb(main):005:0> a.chars
=> ["N", "ư", "̃"]
irb(main):006:0> b.chars
=> ["N", "ữ"]
Come posso confrontare questo tipo di stringhe?
Ottiene un e b dallo stesso browser e os? Mi sembra un problema specifico per il rendering di caratteri di browser/os. Probabilmente si può provare la tabella di sostituzione spot e quindi effettuare la sostituzione inversa. – Cyrill