我有一个带有特殊口音的CSV文件,并通过选择 UTF-8 编码将其保存在记事本中。当我使用 Java 读取文件时,它也会读取 BOM 字符。
所以我想以 UTF-8 格式保存这个文件,而不是最初在记事本中附加 BOM。
否则,在读取文件内容时,Java 中是否有一个内置类可以消除开头出现的 BOM 字符?
使用Notepad++ - 它是免费的,而且比 Notepad 好得多。这将有助于在没有 BOM 的情况下使用Encoding → Encode in UTF-8 without BOM保存文本:
Notepad++ v6 和更早版本:
Notepad++ v7+:
当我在 Java 中遇到这个问题时,我没有找到任何库来解析这前三个字节(BOM)。所以我的建议:
PushbackInputStream(in, 3)
.请改用记事本++。请参阅我的个人博客文章。在 Notepad++ 中,选择“编码”菜单,然后选择“在没有 BOM 的情况下以 UTF-8 编码”。
正如@martin-geisler 指出的那样,我刚刚从这篇 Stack Overflow 帖子中了解到,通过选择ANSI作为编码,您可以在 Windows 记事本中保存没有 BOM 的文件。
我假设对于更高级的用途,这将不起作用,因为生成的文件可能不是希望的最终编码,但实际上是 ANSI;但我测试并确认这可以仅使用记事本保存一个非常小的 .php 脚本而无需 BOM。
我了解到Windows 的记事本不是真正的编辑器的漫长而艰难的过程,尽管我想向其他人指出,尽管如此,当您在较新的 Windows 机器上键入“编辑器”时,它会被误导性调用,至少在我的一个。
我目前正在使用Emacs和其他编辑器来解决这个问题。
Windows 10 版本 1903(2019 年 5 月更新)及更高版本上的记事本支持在没有 BOM 的情况下保存为 UTF-8。事实上,UTF-8 现在是默认的文件格式。
答案是:一点也不。记事本无法做到这一点。
在 Java 中,您可以跳过 InputStream 中的第一个字节并完成。
您可能想尝试Notepad2或Notepad++。这些记事本替代品可以让您选择是否输出 BOM。
至于Java解决方案,据我所知,Java不理解标准的UTF-8。我用谷歌搜索,发现Java 的 UTF-8 和 Unicode 写入已损坏 - 使用此修复程序可能是解决方案。
我们正在使用实用程序BOMStripperInputStream.java从我们的输入中剥离 BOM(如果存在)。