Подтвердить что ты не робот

Разделение символов символов Unicode

На протяжении огромного числа символов Юникода есть некоторые, которые на самом деле представляют более одного символа, например, лигатура U + FB00 ff для двух символов "f". Можно ли легко преобразовать символы, подобные этим, в несколько отдельных символов? Предпочтительно что-то доступно в стандартном Java API, но при необходимости я могу обратиться к внешней библиотеке.

4b9b3361

Ответ 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, но я не уверен, что это работает для лигатур.