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

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

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

否则在Java中有没有内置的类,在读取文件中的内容时消除了开始时出现的BOM字符?

  1. 使用记事本++ – 免费,比记事本好得多。 这将有助于保存没有BOM的文本使用Enconding > 编码UTF-8没有BOM记事本++菜单栏>编码> Notepad ++ v6.7.9.2中没有BOM菜单的UTF-8编码

  2. 当我在Java中遇到这个问题时,我没有发现任何库来parsing这三个字节(BOM)。 所以我的build议是:

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

用记事本++代替。 看到我的个人博客文章 。 在Notepad ++中,select“编码”菜单,然后select“不带BOM的UTF-8编码”。

正如@ martin-geisler指出的那样,我从这个Stack Overflow文章中学到,通过selectANSI作为编码 ,您可以在没有Windows记事本的BOM的情况下保存文件

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

我学会了Windows记事本并不是一个真正的编辑器,虽然我想指出其他人,尽pipe如此,当你在新的Windows机器上键入“编辑器”时,它被误导地调用在我的一个。

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

答案是:一点也不。 记事本不能这样做。

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

您可能想要尝试Notepad2或Notepad ++ 。 那些记事本替代品可以select是否输出物料清单。

至于Java解决scheme,就我所知,Java并不了解标准的UTF-8。 我search了一下,发现Java的UTF-8和Unicode编写已经破坏 – 使用这个修复可能是解决scheme。

如果存在,我们使用实用工具BOMStripperInputStream.java去除input中的BOM。

Interesting Posts