【问题标题】:Buffered Reader Output looking unlike the file? [duplicate]缓冲阅读器输出看起来不像文件? [复制]
【发布时间】:2019-09-01 03:51:29
【问题描述】:

我的程序应该读取整个文件,它可以工作,但是当我将它输出到控制台时,开始时有一些奇怪的字符:

try {
        String name = null;
        JFileChooser fc = new JFileChooser();
        int approve = fc.showOpenDialog(null);
        if (approve == JFileChooser.APPROVE_OPTION) {
            name = fc.getSelectedFile().getAbsolutePath().toString();
        }
        File file = new File(name);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        StringBuilder sb = new StringBuilder();
        String data;
        while ((data = br.readLine()) != null)  {
            sb.append(data).append(" ");
        }
        br.close();
        String readFile = sb.toString();
        System.out.println(readFile);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Error occured", "Error", JOptionPane.ERROR_MESSAGE);
    }

控制台输出如下所示:

test 01.01.2018 tets test 12.03.2019 

现在在我选择的文件(html 文件)中,没有字符  那么它们来自哪里?

【问题讨论】:

  • 读取文件时需要指定正确的字符集。
  • 您没有指定字符编码。 不相关:“发生”有两个 R。

标签: java file-io bufferedreader reader


【解决方案1】:

您的文件以 UTF-8 BOM(字节顺序标记)开头。

正如您在 this Wikipedia page 上看到的,当使用非 UTF-8 编码(如 Windows-1252 或 ISO-8851-1)读取文件时,BOM 看起来与您描述的完全一样。

更改代码以使用 UTF-8 读取文件,或将文件更改为不使用 UTF-8 写入。

如果坚持使用 UTF-8,请注意 Java 本身并不支持 UTF-8 BOM,因此您必须自行检查并删除它。更好的是,将创建文件的代码更改为不编写 BOM。一些文本编辑器可能会创建一个,但您通常可以将它们配置为不创建。

您还可以使用一些文本编辑器来删除 BOM 和/或更改编码,例如Notepad++ 两者都可以。

【讨论】:

  • 在 ANSI 中保存文件可以解决问题,谢谢
猜你喜欢
  • 2013-03-29
  • 2023-03-28
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多