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

问题描述 投票:26回答:7

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

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

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

java csv utf-8 notepad
7个回答
33
投票
  1. 使用Notepad++-它是免费的,比记事本好得多。使用编码在没有BOM的UTF-8中编码,可以帮助保存没有BOM的文本:“编码->在不带BOM的UTF-8中进行编码在Unicode v6.7中。 >

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

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

9
投票

改为使用记事本++。看到我的personal blog post。在Notepad ++中,选择“编码”菜单,然后选择“在没有BOM的UTF-8中编码”。


9
投票

我从this Stack Overflow post中学到,正如@ martin-geisler所指出的,通过选择ANSI


2
投票
Windows 10版本1903(2019年5月更新)和更高版本上的记事本支持在没有BOM的情况下保存到UTF-8。实际上,UTF-8是现在的默认文件格式。

Screenshot of Notepad


0
投票
答案是:完全没有。记事本无法做到这一点。

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


0
投票
您可能想尝试Notepad2Notepad++。这些记事本替代品可以让您选择是否输出BOM。

据我所知,对于Java解决方案,Java不了解标准的UTF-8。我在Google上搜索,发现

Java's UTF-8 and Unicode writing is broken - Use this fix


0
投票
我们正在使用实用程序BOMStripperInputStream.java从输入中剥离BOM,如果存在。
© www.soinside.com 2019 - 2024. All rights reserved.