如何使记事本在没有BOM的情况下以UTF-8保存文本?

时间:2011-12-08 14:32:56

标签: java csv utf-8 notepad

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

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

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

7 个答案:

答案 0 :(得分:32)

  1. 使用Notepad++ - 免费且比记事本好得多。使用 Enconding >这将有助于保存没有BOM的文本在没有BOM的情况下以UTF-8编码Screenshot of the Notepad++ Menubar > Encoding > Encode in UTF-8 without BOM menu in Notepad++ v6.7.9.2

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

    • 使用PushbackInputStream(in, 3)
    • 读取前三个字节
    • 如果不是BOM( EF BB BF ),请将它们推回去
    • 将流处理为UTF-8

答案 1 :(得分:9)

请改用Notepad ++。查看我的personal blog post。在Notepad ++中,选择“编码”菜单,然后选择“在没有BOM的UTF-8中编码”。

答案 2 :(得分:8)

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

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

我学到了很长很难的方法 Windows'记事本不是真正的编辑器,尽管我想指出其他人,尽管如此,它还是误导在较新的Windows机器上键入“编辑器”时调用,至少在我的某台机器上。

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

答案 3 :(得分:0)

答案是:完全没有。记事本不能那样做。

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

答案 4 :(得分:0)

您可能想要试用Notepad2Notepad++。这些记事本替换可以选择是否输出BOM。

至于Java解决方案,据我所知,Java不了解标准的UTF-8。我用Google搜索并找到了可能是解决方案的 Java's UTF-8 and Unicode writing is broken - Use this fix

答案 5 :(得分:0)

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

答案 6 :(得分:0)

Windows 10 1903和更高版本上的

记事本支持在没有BOM的情况下保存为UTF-8。实际上,UTF-8是现在的默认文件格式。

Screenshot of Notepad

参考:https://www.bleepingcomputer.com/news/microsoft/windows-10-notepad-is-getting-better-utf-8-encoding-support/