На протяжении огромного числа символов Юникода есть некоторые, которые на самом деле представляют более одного символа, например, лигатура U + FB00 ff для двух символов "f". Можно ли легко преобразовать символы, подобные этим, в несколько отдельных символов? Предпочтительно что-то доступно в стандартном Java API, но при необходимости я могу обратиться к внешней библиотеке.
Разделение символов символов Unicode
Ответ 1
U + FB00 является символом совместимости. Обычно Unicode не поддерживает отдельные кодовые точки для лигатур (утверждая, что это решение макета, если и когда лигатура должна использоваться и не должна влиять на то, как хранятся данные). Некоторые из них по-прежнему существуют для обеспечения совместимости конверсии в обратном направлении со старыми кодировками, которые представляют собой лигатуры как отдельные объекты.
К счастью, информация, которая содержит лигатуру , присутствует в файле данных Unicode и наиболее способной обработке строк системы имеют встроенные данные.
В Java вам нужно будет использовать класс Normalizer
и NFKC
:
String ff ="\uFB00";
String normalized = Normalizer.normalize(ff, Form.NFKC);
System.out.println(ff + " = " + normalized);
Откроется
ff = ff
Ответ 2
Процесс, о котором вы говорите, называется нормализацией и указан в Unicode Normalization Forms технической заметке.
В библиотеке классов Java SE есть класс, называемый java.text.Normalizer
, который реализует этот процесс. Однако вам нужно прочитать документ Юникода, связанный выше, чтобы выяснить, какую из "форм нормализации" вам нужно использовать, чтобы получить желаемый результат. Это не просто...
Ответ 3
Вы можете попробовать java.text.Normalizer, но я не уверен, что это работает для лигатур.