Этот системный компонент называется средством визуализации шрифтов или растеризатором шрифтов.Он отвечает за преобразование последовательности кодов символов в пиксели на основе глифов, определенных в шрифте.Как уже говорилось в других ответах, различные значения кодировки символов, которые вы можете получить и установить из Java, не имеют значения.Когда JVM дает средству визуализации шрифта последовательность кодов символов, оно сообщает ему, какая кодировка применяется (возможно, UTF16, но это прозрачно для программиста Java.) Средство визуализации шрифтов использует кодировку шрифта, указанную в файле шрифта, для сопоставления соответствующей кодировки.глифы.
Текущие версии Windows и Mac OS X поставляются с отличными средствами визуализации шрифтов.
Первая путаница заключается в том, что JRE поставляется со своим собственным средством визуализации шрифтов, как часть платформы Java2D, и это то, что использует Swing.Должна быть возможность контролировать, использует ли Java собственный рендерер или системный.
РЕДАКТИРОВАТЬ: Как указано McDowell в комментарии к OS XВы можете включить системный рендерер, установив свойство Java apple.awt.graphics.UseQuartz = true.
Вторая путаница заключается в том, что лигатуры на английском языке являются необязательными.Настольное издательское приложение заменит лигатуру "ffl" (один глиф в шрифте), когда оно увидит слово типа "shuffle", но большинство других приложений не беспокоятся.Исходя из того, что вы сказали о Деванагари (и о том, что я только что прочитал в Википедии), я понял, что лигатуры на этом языке не являются обязательными.
По умолчанию средство визуализации шрифтов Java2D не выполняет лигатуры.Однако в JavaDoc для java.awt.font.TextAttribute.LIGATURES говорится, что лигатуры всегда включены для написания систем, которые в них нуждаются.Если это не ваш опыт, возможно, вы обнаружили ошибку в средстве визуализации шрифтов Java2D.Тем временем попробуйте использовать конструктор Font, который берет карту атрибутов шрифта, включая TextAttribute.LIGATURES.