首页 > 解决方案 > Java:在 JTextArea 中未正确显示 UTF8 编码

问题描述

我正在尝试在 JTextArea 中显示 txt 或 docx 文件内容,但文本区域无法正确显示亚美尼亚语或俄语文本。InputStreamReader 中的 UTF-8 编码没有帮助:

public class TextReader {

    public static String getText(File textFile) throws IOException {
        FileInputStream fis = new FileInputStream(textFile);
        InputStreamReader isr  = new InputStreamReader(fis, "UTF8");
        BufferedReader br  = new BufferedReader(isr);
        StringBuilder text = new StringBuilder();

        String c;

        while ((c = br.readLine()) != null)
            text.append(c + "\n");

        fis.close();
        isr.close();
        br.close();

        return String.valueOf(text);
    }

}

我在 JTextArea 的另一个类中使用这个静态方法:

        String text = TextReader.getText(currentFile);
        textArea.setText(text);

运行并选择文件后,我得到了随机字符。在这种情况下可能有什么解决方案?

标签: javaswingcharacter-encodingjava-io

解决方案


您的代码似乎很好。我的猜测是您正在尝试读取docx文件。

您不能docx以这种方式直接读取文件。使用像Apache POI这样的库。

如果您确实在使用文本文件,则可能是您用来保存文件的应用程序使用了错误的编码。您可以尝试使用 Java 本身将一些(硬编码)示例俄语文本保存到文本文件中,然后再次将其读入您的JTextArea.


推荐阅读