读取 UTF-8 文件并编写普通的 ANSI?

dyn*_*mic 2 java

我有一个 UTF-8 文件(它是一个 csv)。
我需要逐行读取这个文件做一些替换,然后逐行写入另一个文件。

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(fileFix), "ASCII")
    );
    bw.write("");   //clean current file


    BufferedReader br = new BufferedReader(new InputStreamReader(
        new FileInputStream(file),"UTF-8")
    );

    String line;
    while ((line = br.readLine()) != null) {
        line = line.replace(";", ",");
        bw.append(line + "\n");
    }
Run Code Online (Sandbox Code Playgroud)

就那么简单。
问题是输出文件 (fileFix) 是 UTF-8,我认为它具有 BOM 字符。

如何在没有 BOM 的情况下将文件编写为普通的 ANSI?

使用软件读取文件时遇到的错误(weka)

在此处输入图片说明

该文件的第一行:

在此处输入图片说明

考虑到记事本++告诉我字符集是 UTF-8。如果我尝试以纯 ASCII 格式(使用 Windows 记事本)转换此文件,则字符会消失

解决方案

当您在第一行时,请运行:

line = line.substring(1);
Run Code Online (Sandbox Code Playgroud)

删除任何 BOM 字符。

Jon*_*eet 5

听起来这是一个 BOM 问题,而不是编码问题。

您可以在编写文件时删除任何 BOM 字符,使用:

line = line.replace("\ufeff", "");
Run Code Online (Sandbox Code Playgroud)

这留下了您是否首先准确读取数据的问题......我强烈建议您不要使用FileWriterandFileReader完全 - 相反,使用InputStreamReaderand OutputStreamWriter,为它们明确指定编码。将读取器编码设置为 UTF-8(假设输入文件确实是 UTF-8),并将写入器编码设置为您想要的任何内容……但老实说,我建议坚持使用 UTF-8。

另请注意,如果您使用的是 Java 7 ,您应该以finally块的形式关闭读取器/写入器,或者使用try-with-resources语句。