如何在Mac OS X上正确显示Java中的组合Unicode文本

时间:2016-10-03 16:36:40

标签: java macos unicode fonts

我在显示正确构成主要字母的重音/修饰符时显示泰语和缅甸语字符时出现问题。

在下面的示例程序中,两个序列\ u100a \ u103a和\ u0e27 \ u0e31应该每个都呈现为单个字形,但在Mac上它们看起来会分解为两个字符。

import javax.swing.*;
import java.awt.*;

public class Test
{
    public static final String TEXT = "\u100a\u103a \u0e27\u0e31";

    public static void main(String[] args)
    {
        System.out.println(System.getProperty("java.vm.name")+" "+System.getProperty("java.version"));
        System.out.println(System.getProperty("os.name")+" "+System.getProperty("os.version")+" "+System.getProperty("os.arch"));
        System.out.println("TEXT is "+TEXT);
        JFrame f = new JFrame("Title "+TEXT);
        JLabel label = new JLabel("Label "+TEXT);
        JTextField text = new JTextField("Text "+TEXT);
        text.setEditable(false);
        JTextField text2 = new JTextField("Text "+TEXT);
        text2.setFont(new Font("Arial Unicode MS", Font.PLAIN, 12));
        text2.setEditable(false);

        f.getContentPane().setLayout(new FlowLayout());
        f.getContentPane().add(label);
        f.getContentPane().add(text);
        f.getContentPane().add(text2);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
}

结果输出

Output of font test

有趣的是,如果我将字体设置为等宽字体或ArialUnicodeMS,则泰语字符现在显示为单个字形,但缅甸字符仍显示为两个字符。两者都在窗口标题和终端窗口中正确显示,因此我知道Mac OS X本身具有正确的字体并知道如何渲染它们。

如何让它在我的Java应用程序中正确显示?

0 个答案:

没有答案