Я ищу способ сравнить две строки Java, которые лексикографически эквивалентны, но не идентичны на уровне байтов.
Более точно возьмите следующее имя файла "baaaé.png", на уровне байта его можно представить двумя разными способами:
[98, 97, 97, 97, -61, -87, 46, 112, 110, 103] → "é" закодировано с помощью 2 байтов
[98, 97, 97, 97, 101, -52, -127, 46, 112, 110, 103] → "é" закодировано с 3 байтами
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));
Сгенерирует следующий вывод:
baaaé.png
baaaé.png
false
Есть ли способ сделать сравнение, чтобы метод equals возвращал true?