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

use*_*036 26 java csv notepad utf-8

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

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

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

kor*_*fey 33

  1. 使用Notepad ++ - 免费并且比记事本好得多.使用Enconding > Encode in UTF-8而不使用BOM,将有助于保存没有BOM的文本: 在Notepad ++ v6.7.9.2中,没有BOM菜单的Notepad ++菜单>编码>编码的UTF-8的屏幕截图

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

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

  • 呃...有人注意到UTF-8 BOM长3个字节而不是2个字节?;)它是**0xEF 0xBB 0xBF**所以你需要去掉文件的前3个字节! (2认同)

zie*_*mer 9

请改用Notepad ++.请参阅我的个人博客文章.在Notepad ++中,选择"编码"菜单,然后选择"在没有BOM的UTF-8中编码".


小智 9

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

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

我学到了Windows'记事本不是真正的编辑器的漫长而艰难的方式,尽管我想向其他人指出,尽管如此,当你在新的Windows机器上键入"编辑器"时,它会被误导性地调用,至少在我的一个.

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


Mar*_*din 6

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

记事本截图

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