29

我有一个带有特殊口音的CSV文件,并通过选择 UTF-8 编码将其保存在记事本中。当我使用 Java 读取文件时,它也会读取 BOM 字符。

所以我想以 UTF-8 格式保存这个文件,而不是最初在记事本中附加 BOM。

否则,在读取文件内容时,Java 中是否有一个内置类可以消除开头出现的 BOM 字符?

4

7 回答 7

37
  1. 使用Notepad++ - 它是免费的,而且比 Notepad 好得多。这将有助于在没有 BOM 的情况下使用EncodingEncode in UTF-8 without BOM保存文本:

    Notepad++ v6 和更早版本: Notepad++ 菜单栏的屏幕截图 -> 编码 -> Notepad++ v6.7.9.2 中没有 BOM 菜单的 UTF-8 编码

    Notepad++ v7+:
    Notepad++ 菜单栏的屏幕截图 -> 编码 -> Notepad++ v7+ 中没有 BOM 菜单的 UTF-8 编码

  2. 当我在 Java 中遇到这个问题时,我没有找到任何库来解析这前三个字节(BOM)。所以我的建议:

    • 使用PushbackInputStream(in, 3).
    • 读取前三个字节
    • 如果不是 BOM ( EF BB BF ),将它们推回
    • 将流处理为 UTF-8
于 2011-12-08T14:40:03.257 回答
9

请改用记事本++。请参阅我的个人博客文章。在 Notepad++ 中,选择“编码”菜单,然后选择“在没有 BOM 的情况下以 UTF-8 编码”。

于 2011-12-08T14:38:21.090 回答
9

正如@martin-geisler 指出的那样,我刚刚从这篇 Stack Overflow 帖子中了解到,通过选择ANSI作为编码,您可以在 Windows 记事本中保存没有 BOM 的文件。

我假设对于更高级的用途,这将不起作用,因为生成的文件可能不是希望的最终编码,但实际上是 ANSI;但我测试并确认这可以仅使用记事本保存一个非常小的 .php 脚本而无需 BOM。

我了解到Windows 的记事本不是真正的编辑器的漫长而艰难的过程,尽管我想向其他人指出,尽管如此,当您在较新的 Windows 机器上键入“编辑器”时,它会被误导性调用,至少在我的一个。

我目前正在使用Emacs和其他编辑器来解决这个问题。

于 2013-05-11T14:04:59.307 回答
6

Windows 10 版本 1903(2019 年 5 月更新)及更高版本上的记事本支持在没有 BOM 的情况下保存为 UTF-8。事实上,UTF-8 现在是默认的文件格式。

记事本截图

参考:Windows 10 记事本正在获得更好的 UTF-8 编码支持

于 2019-07-25T21:51:52.020 回答
0

答案是:一点也不。记事本无法做到这一点。

在 Java 中,您可以跳过 InputStream 中的第一个字节并完成。

于 2011-12-08T14:37:08.347 回答
0

您可能想尝试Notepad2Notepad++。这些记事本替代品可以让您选择是否输出 BOM。

至于Java解决方案,据我所知,Java不理解标准的UTF-8。我用谷歌搜索,发现Java 的 UTF-8 和 Unicode 写入已损坏 - 使用此修复程序可能是解决方案。

于 2011-12-08T14:39:06.567 回答
0

我们正在使用实用程序BOMStripperInputStream.java从我们的输入中剥离 BOM(如果存在)。

于 2011-12-08T14:42:23.737 回答