读取 UTF-8 - BOM 标记

2022-08-31 12:06:13

我正在通过FileReader读取文件 - 该文件是UTF-8解码的(使用BOM),现在我的问题是:我读取文件并输出一个字符串,但遗憾的是BOM标记也被输出了。为什么会发生这种情况?

fr = new FileReader(file);
br = new BufferedReader(fr);
    String tmp = null;
    while ((tmp = br.readLine()) != null) {
    String text;    
    text = new String(tmp.getBytes(), "UTF-8");
    content += text + System.getProperty("line.separator");
}

第一行之后的输出

?<style>

答案 1

在 Java 中,您必须手动使用 UTF8 BOM(如果存在)。此行为记录在 Java bug 数据库、此处此处。目前不会有任何修复,因为它会破坏现有的工具,如JavaDoc或XML解析器。Apache IO Commons提供了一个来处理这种情况。BOMInputStream

看看这个解决方案:使用BOM处理UTF8文件


答案 2

最简单的解决方法可能只是从字符串中删除结果,因为它极不可能由于任何其他原因而出现。\uFEFF

tmp = tmp.replace("\uFEFF", "");

另请参阅此番石榴错误报告