如何使记事本保存在没有BOM的UTF-8文本?
我有一个特殊口音的CSV文件,并通过selectUTF-8编码将它保存在记事本中。 当我使用Java读取文件时,它也读取BOM字符。
所以我想用UTF-8格式保存这个文件,而不是最初在记事本中附加BOM。
否则在Java中有没有内置的类,在读取文件中的内容时消除了开始时出现的BOM字符?
-
使用记事本++ – 免费,比记事本好得多。 这将有助于保存没有BOM的文本使用Enconding > 编码UTF-8没有BOM :
-
当我在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。