Разделение лигатурных символов Unicode - PullRequest
19 голосов
/ 24 августа 2011

В огромном количестве символов Юникода есть такие, которые на самом деле представляют более одного символа, например, лигатура U + FB00 two для двух символов 'f'. Есть ли способ легко преобразовать подобные символы в несколько отдельных символов? Желательно, чтобы что-то было доступно в стандартном Java API, но я могу ссылаться на внешнюю библиотеку, если это необходимо.

Ответы [ 3 ]

19 голосов
/ 24 августа 2011

U + FB00 - символ совместимости.Обычно Unicode не поддерживает отдельные кодовые точки для лигатур (утверждая, что это решение макета, если и когда лигатура должна использоваться и не должна влиять на то, как хранятся данные). несколько из них все еще существуют, чтобы обеспечить совместимость преобразования в обоих направлениях со старыми кодировками, которые делают представляют лигатуры как отдельные объекты.

К счастью, информация, которая символизирует лигатурупредставляет , присутствует в файле данных Unicode , и большинство систем обработки строк имеют эти данные встроенными.

В Java вам необходимо использовать Normalizer класс и NFKC форма:

String ff ="\uFB00";
String normalized = Normalizer.normalize(ff, Form.NFKC);
System.out.println(ff + " = " + normalized);

Это напечатает

ff = ff
4 голосов
/ 24 августа 2011

Процесс, о котором вы говорите, называется нормализацией и указан в формах нормализации Unicode в техническом примечании.

В библиотеке классов Java SE имеется класс java.text.Normalizer, который реализует этот процесс. Тем не менее, вам нужно прочитать документ Unicode, связанный выше, чтобы выяснить, какую из «форм нормализации» вам нужно использовать, чтобы получить желаемый результат. Это не просто ....

1 голос
/ 24 августа 2011

Вы можете попробовать java.text.Normalizer , но я не совсем уверен, работает ли это для лигатур.

...