Sto cercando un modo per confrontare due stringhe Java che sono lessicograficamente equivalenti ma non identiche a livello di byte.Confronta due stringhe lessicograficamente equivalenti ma non identiche a livello di byte
Più precisamente prendere il seguente nome file "baaaé.png", a livello di byte che può essere rappresentato in due modi diversi:
[98, 97, 97, 97, -61, -87 , 46, 112, 110, 103] -> il "é" è codificato con 2 byte
[98, 97, 97, 97, 101, -52, -127, 46, 112, 110, 103] -> il "é" è codificato con 3 byte
byte[] ch = {98, 97, 97, 97, -61, -87, 46, 112, 110, 103};
byte[] ff = {98, 97, 97, 97, 101, -52, -127, 46, 112, 110, 103};
String st = new String(ch,"UTF-8");
String st2 = new String(ff,"UTF-8");
System.out.println(st);
System.out.println(st2);
System.out.println(st.equals(st2));
Genererà il seguente risultato:
baaaé.png
baaaé.png
false
C'è un modo per fare il confronto in modo che il metodo equals restituisce true?
Non rendono lo stesso qui. –
@dystroy che ci porta a riconsiderare la frase "_lexicographically equivalent_" :) – Fallup
@dystroy Il modulo di normalizzazione (fortemente) preferito per il web è NFC. A quanto pare il tuo browser web prende la scorciatoia facile e supporta solo NFC, non NFD. Per quello che vale, il mio fa lo stesso. Apparentemente i browser Web non si preoccupano di implementare NFD. Tuttavia, posso copiare e incollare entrambi gli esempi in un'applicazione diversa che supporta sia NFC che NFD e vengono visualizzati in modo identico. – Celada