在Java中,如何检测Unicode图像是否可以显示在JButton中?

时间:2019-07-03 16:22:34

标签: java unicode

我发现了以下问题:Detect when a unicode character cannot be displayed correctly

但这不是Java语言。

我有以下代码:

int codePoint=Integer.parseInt(unicodeText,16);
byte eBytes[]=new String(Character.toChars(codePoint)).getBytes(StandardCharsets.UTF_8);
String str=new String(eBytes,Charset.forName("UTF-8"));

JButton button=new JButton(str);

它可以像这样在JButton上显示unicode图像:

enter image description here

因此,如果将unicodeText设置为“ 1F602”之类的内容,则它可以在按钮上显示图像。

我的问题是:

<1>我尝试了Java 8和Java 12,结果是相同的,它们从某些Unicode中丢失了相同的图像,为什么?可以做些什么来使丢失的图像显示出来,似乎Java升级没有做到。

<2>如何从Java应用程序检测无法显示哪些unicode?

1 个答案:

答案 0 :(得分:1)

这取决于字体,因此请使用Font::canDisplayUpTo

实际上,抓住您的Font并尝试以下操作:

JButton button = new JButton(str);
Font font = button.getFont();
int failingIndex = font.canDisplayUpTo(str);
if (failingIndex >= 0) {
  // failingIndex points to the first codepoint in your string that cannot be represented with the font.
} else {
  // This string can be displayed with the given font.
}

因此,如果字体不能按预期方式呈现字符,请使用其他可以显示的字体。