应用程序中的 Unicode 字符无法正确显示

Unicode characters in app doesn't show correctly

如何转换字符串,例如 "Bohinjska Češnjica"。我从网站上得到的字符串,它没有在 unicode 中编码。它在使用 swing(Netbeans) 的程序中工作得很好,但是当我将 link 传递到 jar 到 windows 控制台(到 运行 jframe 应用程序)对于字符 'Č''š',它不会在字符串 "Bohinjska Češnjica" 中显示正确的字符。

String example="Bohinjska Češnjica";

我从网站 获取该字符串。 我如何在 Swing 应用程序中编码或显示 ("Bohinjska Češnjica"),所以当我将 运行 一个 jframe 应用程序时,它会向我显示这些字符(当然还有其他 unicode 字符('Ž '、'ž'、'č' 和 'Š'))?

Link 1 :jar file of my program runned from console Link2:when i run program from netbeans

正在从网站阅读内容 :

             URL nov = new URL("http://www.arso.gov.si/vreme/napovedi%20in%20podatki/vreme_avt.html");
            URLConnection conn = nov.openConnection(); //connect to a   website
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder niz = new StringBuilder(); 
            while ((inputLine = br.readLine()) != null) {
                String vrstica = inputLine.trim(); //reading html...

}

尝试使用支持 Unicode 字符的字体,例如 Arial Unicode MS。

在运行时,我们可以使用Font.canDisplayUpTo(String)来确定哪些安装的字体可以显示给定的文本。 Font.SANS_SERIFFont.SERIF 等逻辑字体通常由其他字体组成,可以涵盖范围广泛的不同文字。

这里是一个使用给定文本的例子,结果是在这台机器上看到的。

顺便说一句 - Google 翻译告诉我这是斯洛文尼亚语而不是克罗地亚语,但幸运的是,完全相同的技术适用于任何脚本。

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);
    }
}

BufferedReader br = new BufferedReader( 新的 InputStreamReader(conn.getInputStream(), "UTF-8"));