Swing不显示unicode字符

我有一些非ascii字符,我试图在Swing JComboBox中显示。 字符显示不正确,我得到很多奇怪的字符,非ascii字符应该是: 乱码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调用在终端中显示正好的字符。

关于这一点有很多关于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运行时环境(版本1.6.0_22-b04-307-10M3261)

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

您可以通过向编译器提供encoding=选项或在ant中使用encoding=属性来执行此操作。

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

将JCombobox的字体更改为Unicode支持的泰米尔语字体。 从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);