使用 Java 删除 BOM 字符

ran*_*ion 4 java byte-order-mark filereader

我正在尝试使用 FileReader 读取文件并将它们写入一个单独的文件。
这些文件是 UTF-8 编码的,但不幸的是,其中一些文件仍然包含 BOM。
我试过的相关代码是这样的:

private final String UTF8_BOM = "\uFEFF";

 private String removeUTF8BOM(String s)
    {
        if (s.startsWith(UTF8_BOM))
        {
            s=s.replace(UTF8_BOM, "");
        }
        return s;
    }

    line=removeUTF8BOM(line);
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,BOM 没有被删除。有没有其他方法可以用 FileReader 做到这一点?我知道 BOMInputStream 应该可以工作,但我更愿意使用 FileReader 找到解决方案。

Joo*_*gen 5

FileReader 类是一个旧的实用程序类,它使用平台编码。在 Windows 上可能不是UTF-8。

最好与其他班级一起阅读。

作为娱乐,并澄清错误,这里有一个肮脏的黑客,适用于具有单字节编码的平台:

private final String UTF8_BOM = new String("\uFEFF".getBytes(StandardCharsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)

这将获取 UTF-8 字节并在当前平台编码中生成一个字符串。

不用说 FileReader 是不可移植的,只处理本地文件。