当前位置: 首页 > 知识库问答 >
问题:

在Java JTextPane中写入UTF-8字符[重复]

双元魁
2023-03-14

我的记事本是用Java JTextPane构建的,在写英语时工作得非常好。然而,用其他语言书写的字母,在我的孟加拉文中,显示的是空方块。我如何解决这个问题?

共有1个答案

宋华灿
2023-03-14

在运行时,我们可以使用字体。canDisplayUpTo(String)以确定安装的字体中哪些可以显示给定的文本。逻辑字体,如字体。无衬线和字体。衬线通常由其他字体组合而成,可以覆盖各种不同的脚本。

下面是一个使用斯洛文尼亚语文本的示例,其结果可以在此机器上看到。左侧的列表显示可以显示字符的已安装字体。

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.EmptyBorder;
import java.util.Vector;

public class CroationTextInGUI {

    private JComponent ui = null;
    private String text = "Bohinjska Češnjica";

    CroationTextInGUI() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new BorderLayout(4,4));
        ui.setBorder(new EmptyBorder(4,4,4,4));
        
        String[] fontFamilies = GraphicsEnvironment.
                getLocalGraphicsEnvironment().
                getAvailableFontFamilyNames();
        Vector<String> croatFreindlyFonts = new Vector<String>();
        for (String name : fontFamilies) {
            Font font = new Font(name, Font.PLAIN, 20);
            if (font.canDisplayUpTo(text)<0) {
                croatFreindlyFonts.add(name);
            }
        }
        final JList list = new JList(croatFreindlyFonts);
        list.setVisibleRowCount(20);
        list.getSelectionModel().setSelectionMode(
                ListSelectionModel.SINGLE_SELECTION);
        ui.add(new JScrollPane(list), BorderLayout.LINE_START);
        
        final JTextArea output = new JTextArea(text, 2, 12);
        output.setLineWrap(true);
        output.setWrapStyleWord(true);
        ui.add(new JScrollPane(output));
        
        ListSelectionListener showFontListener = new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                Font f = new Font(
                        list.getSelectedValue().toString(), Font.PLAIN, 50);
                output.setFont(f);
            }
        };
        list.addListSelectionListener(showFontListener);
        list.setSelectedIndex(0);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                CroationTextInGUI o = new CroationTextInGUI();

                JFrame f = new JFrame("Croation Text in GUI");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
 类似资料:
  • 编码和解码字符串并不像我想象的那么容易。 原始字符串如下: 经过PHP base64编码(使用三次)后,它看起来有所不同: 当尝试JS window.atob()解码字符串时,结果是这样的: UTF-8字符显示不正确。我应该使用什么功能来修复这个问题?

  • 我需要添加用户名从Facebook到数据库,这些名称有UTF-8字符,如 (ą,č,ę,ė,į,š,ų,ū).当我把它添加到数据库中,例如字母看起来像

  • 问题内容: 我想将Jackson的内容写成一个字符串,且UTF-8字符写为ASCII(转义Unicode)。 这是一个示例方法: 默认情况下,此输出: 我想要输出的是: 我该怎么做? 问题答案: 您应该启用JsonGenerator功能,该功能控制非ASCII字符的转义。这是一个例子: 输出为:

  • 问题内容: 我真的很困惑。当我做: 它给我错误 UnicodeDecodeError:’ascii’编解码器无法解码位置0的字节0xef:序数不在范围内(128) 如果我做: 它工作正常。 问题 是为什么第一种方法会失败?以及如何插入宝? 如果第二种方法是正确的方法,那么使用的重点是什么? 问题答案: 我相信问题在于这是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据“我是将Un

  • 问题内容: 我的数据库已正确设置为UTF-8,并且正在处理包含日语字符的数据库。如果我从mysql命令行执行SELECT * …,我会正确看到日语字符。当将数据从数据库中拉出并显示在网页上时,我可以正确地看到它。 但是,在phpMyAdmin中查看表数据时,我只会看到垃圾文本。即。 ç§ã日本料ç†ãŒå¥½ããããã㥥œœ¬æ–™ç†ã… 如何获取phpMyAdmin以日语显示字

  • 我有一些代码如下所示。 该项目的标准字符集是“UTF-8”。并且所有消息都很好地打印为UTF-8。我猜把UTF-8字符串放入java.lang.Object是压垮UTF-8的原因。 我该怎么解决这个? 我已经试过了: =在上块中= =配置= 将消息转换器添加到root-context.xml中,如下所示。 ===*条件=== 感谢阅读和分享我的问题:D