Ответ 1
Обновленный ответ
После вашего комментария я понял, что я ошибался, т.е. диакритический символ должен появиться вторым в последовательности байтов, хотя он должен отображаться слева от главного символа.
Итак, оказывается, iText не поддерживает этот тип рендеринга на индикативных символах. Грубо говоря, iText использует awt Graphics2D
для визуализации нелатинских символов Unicode, один за другим, в виде изображений в PDF. (Я думаю, это потому, что соответствующие шрифты не обязательно устанавливаются на всех компьютерах). Эта особенность не учитывает этот особый порядок.
iText поддерживает аналогичное поведение для арабского языка, используя класс, предоставленный другим разработчиком. См. com.itextpdf.text.pdf.ArabicLigaturizer. Возможно, вы сами могли бы создать подобный? (!)
Похоже, что это произошло раньше:
- http://thread.gmane.org/gmane.comp.java.lib.itext.general/56702/focus=59552
- http://itext-general.2136553.n4.nabble.com/patch-for-complex-scripts-indic-rendering-td2167588.html
Оригинальный ответ
Кем чхо,
Я считаю, что iText отображает правильные символы, но первые 2 символа вашего ввода были "перевернуты", прежде чем перевести строку в юникодные точки. Таким образом, проблема возникла до того, как данные даже попали в iText.
Основная проблема заключается в том, что символ "первый" является символом "pre-base", который является типом Diacritic. Это немного похоже на "акцент" в европейских текстах, поскольку он не может существовать сам по себе, и его целью является украшение другого персонажа. В этом случае он превращает "Ba" (બ) в "Bi".
Вы увидите int the Unicode Codepage, что первый символ (િ) действительно имеет кодовую точку \u0ABF, а второй (બ) -\u0AAC: http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode
Итак, где-то между Google Transliterate и вашим кодовым представлением эти символы перевернулись. Итак, вам нужно просмотреть, как вы сделали этот перевод.
Как вы преобразовали эти символы в кодовые страницы?
По-видимому, некоторые интерпретаторы помещают "предварительную базу" после основного согласного, а не перед ним:
- Обратите внимание, что когда вы вставляете эти символы в (Linux) терминал, первые 2 персонажа выходят назад. Я что-то верю подобное случилось и для вас.
- Вы также заметите, что при попытке редактируя это слово в Google Transliterate, вы не можете поместить курсор между первые 2 символа, а когда вы нажмете backspace, слева символ удаляется перед правом.
Итак, если вы можете решить, где произошло это "перевертывание", то, надеюсь, ваше решение представится.
Надеюсь, что это поможет