Swing не отображает символы Юникода - PullRequest
3 голосов
/ 20 марта 2011

У меня есть некоторые не-ascii символы, которые я пытаюсь отобразить в Swing JComboBox.Символы отображаются неправильно, я получаю много странных символов, где символы не-ascii должны быть: Garbled ComboBox

import javax.swing.*;
public class Test {
  public static void main(String[] args) {
    String[] choices = new String[]{"Good's","Bad’s","தமிழ்"};
    for (String s : choices) System.out.println(s);
    JComboBox choiceBox = new JComboBox(choices);

    JFrame frame = new JFrame("Test");
    frame.setSize(400, 400);
    frame.add(choiceBox);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

(Обратите внимание на немного другой апостроф в Bad, который и начал все этовещь.)

Вызов System.out.println отлично отображает символы в моем терминале.

Есть несколько вопросов по SO по этому поводу, и они предлагают перечислить шрифты из GraphicsEnvironment и выбратьтолько те, которые утверждают, что отображают мои персонажи.К сожалению, этот трюк не работает для меня.

Font font = new Font("Ariel", Font.PLAIN, 12);
for (String s : choices) assert font.canDisplayUpTo(s) < 0;
choiceBox.setFont(font);

Утверждение не завершается ошибкой, но все еще отображает искаженные символы.

Я на OSX 10.6.5, Java (TM) SE Runtime Environment (сборка 1.6.0_22-b04-307-10M3261)

Ответы [ 3 ]

5 голосов
/ 20 марта 2011

Убедитесь, что ваш компилятор использует ту же кодировку, что и ваш редактор (кажется, ваш редактор уже использует ту же кодировку, что и консоль, а компилятор обычно использует кодировку виртуальной машины по умолчанию, заданную свойством file.encoding).

Вы можете сделать это, указав компилятору параметр -encoding или атрибут encoding= в ant.

2 голосов
/ 20 марта 2011

Шрифт, который вы пытаетесь использовать, не имеет необходимых символов. canDisplay методы почему-то не работают на Mac. В Linux и Windows ваш код ведет себя так, как ожидается, и утверждение не выполняется, но на Mac это не так. У меня была похожая проблема с использованием некоторых символов на Mac, я просто использовал шрифт Sans, потому что он казался самым полным шрифтом Unicode. Если вы ознакомитесь с этой веткой , вы обнаружите довольно распространенную проблему. Так что, возможно, вы хотите согласиться с тем, что Костис предложил в комментарии, а также проверить это .

1 голос
/ 19 февраля 2013

Изменяет шрифт JCombobox на шрифт, поддерживаемый юникодом тамильского.Скачать шрифт из http://www.ildc.in/Tamil/GIST/htm/otfonts.htm

Font font = new Font("TamilFont", Font.PLAIN, 12);
for (String s : choices) assert font.canDisplayUpTo(s) < 0;
choiceBox.setFont(font);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...