缓冲读卡器输出看起来与文件不同? [重复]

问题描述 投票:-1回答:1

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

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文件)中选择IN,没有字符qazxsw poi所以它们来自哪里?

java file-io bufferedreader reader
1个回答
0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.