我有一个带有特殊重音的CSV文件,并通过选择UTF-8编码将其保存在记事本中。当我使用Java读取文件时,它也会读取BOM字符。
所以我想以UTF-8格式保存此文件,而不是最初在记事本中添加BOM。
否则Java中有任何内置类可以在读取文件中的内容时消除开头出现的BOM字符?
答案 0 :(得分:32)
使用Notepad++ - 免费且比记事本好得多。使用 Enconding >这将有助于保存没有BOM的文本在没有BOM的情况下以UTF-8编码:
当我在Java中遇到这个问题时,我没有找到任何库来解析前三个字节(BOM)。所以我的建议是:
PushbackInputStream(in, 3)
。答案 1 :(得分:9)
请改用Notepad ++。查看我的personal blog post。在Notepad ++中,选择“编码”菜单,然后选择“在没有BOM的UTF-8中编码”。
答案 2 :(得分:8)
我刚刚从this Stack Overflow post了解到,正如@ martin-geisler所指出的那样,您可以在Windows记事本中保存没有BOM的文件,选择 ANSI 作为编码。 强>
我假设对于更高级的用途,这将不起作用,因为生成的文件可能不是最终编码希望,但实际上是ANSI;但我测试并确认这可以保存一个非常小的.php脚本而不使用BOM只使用记事本。
我学到了很长很难的方法 Windows'记事本不是真正的编辑器,尽管我想指出其他人,尽管如此,它还是误导在较新的Windows机器上键入“编辑器”时调用,至少在我的某台机器上。
我目前正在使用Emacs和其他编辑来解决此问题。
答案 3 :(得分:0)
答案是:完全没有。记事本不能那样做。
在Java中,您可以跳过InputStream中的第一个字节并完成。
答案 4 :(得分:0)
您可能想要试用Notepad2或Notepad++。这些记事本替换可以选择是否输出BOM。
至于Java解决方案,据我所知,Java不了解标准的UTF-8。我用Google搜索并找到了可能是解决方案的 Java's UTF-8 and Unicode writing is broken - Use this fix 。
答案 5 :(得分:0)
我们正在使用实用程序BOMStripperInputStream.java从我们的输入中删除BOM(如果存在)。
答案 6 :(得分:0)
记事本支持在没有BOM的情况下保存为UTF-8。实际上,UTF-8是现在的默认文件格式。