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

2022-09-01 12:41:11

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

因此,我想以UTF-8格式保存此文件,而无需最初在记事本中附加BOM。

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


答案 1
  1. 使用记事本 ++ - 它是免费的,比记事本好得多。使用编码保存文本将有助于保存没有BOM的文本 → 以 UTF-8 编码而不使用 BOM

    Notepad++ v6 及更早版本: Screenshot of the Notepad++ Menubar -> Encoding -> Encode in UTF-8 without BOM menu in Notepad++ v6.7.9.2

    Notepad++ v7+:
    Screenshot of the Notepad++ Menubar -> Encoding -> Encode in UTF-8 without BOM menu in Notepad++ v7+

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

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

答案 2

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

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

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

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