Swing不显示unicode字符

时间:2011-03-20 00:59:15

标签: java swing fonts

我有一些非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's中略有不同的撇号,这就是开始这一切的原因。)

System.out.println来电显示终端中的字符。

关于这一点有很多问题,他们建议列出来自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运行时环境(版本1.6.0_22-b04-307-10M3261)

3 个答案:

答案 0 :(得分:5)

确保您的编译器使用与编辑器相同的编码(您的编辑器已经使用与控制台相同的编码器,并且编译器通常使用VM的默认编码,由file.encoding属性给出)

您可以通过向编译器提供-encoding选项或在ant中提供encoding=属性来实现此目的。

答案 1 :(得分:2)

您尝试使用的字体没有所需的字形。 canDisplay方法因某些原因在Mac上失败。在Linux和Windows上,您的代码按预期运行并且断言失败,但在Mac上它不会失败。我在使用Mac上的某些字符时遇到了类似的问题,我只是使用了Sans字体,因为它看起来像是最完整的Unicode字体。如果你查看this thread,你会发现它常见的问题。所以,也许您想要了解Costis在评论中建议的内容,并查看this

答案 2 :(得分:1)

将JCombobox的字体更改为支持Unicode的Tamil字体。 从中下载字体 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);