读取 UTF-8 - BOM 标记

新手上路,请多包涵

我正在通过 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>

原文由 onigunn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 762
2 个回答

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

看看这个解决方案: Handle UTF8 file with BOM

原文由 RealHowTo 发布,翻译遵循 CC BY-SA 4.0 许可协议

最简单的修复可能只是从字符串中删除生成的 \uFEFF ,因为它极不可能因任何其他原因出现。

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

另请参阅 此 Guava 错误报告

原文由 finnw 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题