Java Swing – невозможно отображать глифы ЮникодаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java Swing – невозможно отображать глифы Юникода

Сообщение Anonymous »

Я пытаюсь отобразить в своем приложении несколько символов Юникода (глифов). Символами могут быть ASCII, CJK, Emojis и т. д. — должна быть возможность отображать все (печатные) символы в базе данных символов Юникода. В конечном итоге отображение должно происходить в текстовом редакторе (JTextArea). Но многие символы отображаются как тофу, и я думаю, что это проблема со шрифтом.

Код: Выделить всё

// here "myText" is the Unicode string
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
for (Font font : fonts)
{
if (font.canDisplayUpTo(myText) < 0) {
System.out.println(font.getName());
}
}
// based on the font names in the above output, I will set the font for the editor instance.
Я установил значение myText как комбинацию символов BMP и одного дополнительного символа (с соответствующим глифом), например Привет всем𐀀. Последний символ — U+10000. Я запустил приведенный выше код. Нет вывода. Поэтому ни один из существующих шрифтов не поддерживает эту строку. Это правильно?
Откуда Java AWT идентифицирует установленные шрифты? Проверяется ли он где-нибудь в моей системе? Если да, то где?
Я попробовал поискать в Интернете и обнаружил, что мне нужно выбрать шрифт, который поддерживает все глифы Юникода. В результате своего исследования я обнаружил, что GNU Unifont поддерживает максимальное количество глифов. Вот я и пытаюсь это использовать.

Код: Выделить всё

Font font = Font.createFont(Font.TRUETYPE_FONT, new File("/path/to/unifont/otf/or/ttf"));
font = font.deriveFont(Font.PLAIN, 11);
Даже с Unifont я не могу отобразить свою строку. Я заметил, что для каждой плоскости существуют отдельные файлы TTF/OTF - BMP, дополнительная плоскость 1, дополнительная плоскость 15 и т. д. Я узнал, что один TTF может поддерживать только 65535 символов (из-за ограничения на 16-битное целое число без знака). Правильно ли это?
Если ограничение составляет 65 535 символов, как мне установить шрифт, который будет отображать все символы? Можно ли объединить два TTF/OTF?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ode-glyphs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»