Java 在OS X上的JLabel中显示unicode字符

Java 在OS X上的JLabel中显示unicode字符,java,swing,unicode,Java,Swing,Unicode,例如,我们有一个LaTeX到Unicode的转换器来显示标题中的斜体字体。然而,在我的Mac上,虽然我在调试器()中看到了正确的Unicode字符串,但这并没有正确呈现。我附加了一个使用创建的Unicode字符串的最小示例。我在我的机器(MacOS Sierra 10.12.6,Java 1.8.0_144)上看到的是以下内容 IDEA中的调试器正确显示 是否有人可以分享一些关于如何解决这一问题的见解?我通读了几篇SO帖子,建议使用支持此功能的字体或以某种方式设置字体大小。但是,我不会在这里

例如,我们有一个LaTeX到Unicode的转换器来显示标题中的斜体字体。然而,在我的Mac上,虽然我在调试器()中看到了正确的Unicode字符串,但这并没有正确呈现。我附加了一个使用创建的Unicode字符串的最小示例。我在我的机器(MacOS Sierra 10.12.6,Java 1.8.0_144)上看到的是以下内容

IDEA中的调试器正确显示

是否有人可以分享一些关于如何解决这一问题的见解?我通读了几篇SO帖子,建议使用支持此功能的字体或以某种方式设置字体大小。但是,我不会在这里调整任何内容。为什么在默认设置中会失败

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class SwingJLabelTester extends JPanel{

    private SwingJLabelTester() {
        super(new GridLayout(1,1));
//        final String latexString = LatexToUnicodeAdapter.format("This is a \\textit{test for italics} and \\textbf{a test for bold}");
        final String latexString = "This is a \uD835\uDC61\uD835\uDC52\uD835\uDC60\uD835\uDC61 \uD835\uDC53\uD835\uDC5C\uD835\uDC5F \uD835\uDC56\uD835\uDC61\uD835\uDC4E\uD835\uDC59\uD835\uDC56\uD835\uDC50\uD835\uDC60 and \uD835\uDC1A \uD835\uDC2D\uD835\uDC1E\uD835\uDC2C\uD835\uDC2D \uD835\uDC1F\uD835\uDC28\uD835\uDC2B \uD835\uDC1B\uD835\uDC28\uD835\uDC25\uD835\uDC1D";
        final JLabel label = new JLabel(latexString, SwingConstants.CENTER);
        label.setVerticalTextPosition(SwingConstants.BOTTOM);
        label.setHorizontalTextPosition(SwingConstants.CENTER);
        add(label);
    }

    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("LabelDemo");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(new SwingJLabelTester());
        frame.setSize(400,400);
        frame.setVisible(true);
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(SwingJLabelTester::createAndShowGUI);
    }

}

这似乎是Java安装中字体属性的问题。它也会影响JavaFX。解决方法是指定字体;e、 g.,
最终字符串latexString=“这是一个”这是一个,uD835\uD835\uD835\uD835\UDC65\UDC65\uDC61\uDC61\uD835\UDC55\uDC53\UDC55\UDC55\UDC55\UDC55\UDC65\UDC65\UDC65\UDC65\uD835\UDC55\uD835\UDC65\UDC65\uDC61\uDC61\uDC61\uDC61\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\uD835\UD83UD835\uDC28\uD835\uDC25\uD835\uDC1D";@VGR不错。我可以通过从标签中提取字体并对所有字符使用
font.canDisplay(c)
来验证缺少的字形。无法显示任何Unicode字符。我迭代了我系统上的所有字体,显然,没有任何字体可以显示这些字符。您是否同意使用简单html而不是Unicode字符是更好的选择?是的。我以为那些角色只是你补充角色的例子。如果您的目标只是显示粗体和/或斜体文本,则永远不要使用Unicode的数学字母数字符号块来实现这一点。Unicode块有特定的用途,与数学公式有关;任何其他用途都是对字符的滥用。你甚至不需要字体;只需使用
“这是对斜体和粗体的测试”
。另见。