从文本文件中读取时会显示符号''

时间:2013-02-05 14:54:50

标签: java byte-order-mark

使用与此处相同的项目和文本文件:Java.NullPointerException null (again)程序正在输出数据,但。让你进入图片:

  

这个程序是一个电话目录,忽略第一个“代码”块,查看该链接上的第二个“代码”块,即带有条目的文本文件。程序按原样输出它们,但它只在从文本文件读取的条目开头给出

有关如何删除它的任何帮助?我正在使用带有文件阅读器的缓冲读卡器。谢谢你提前。

  • 文本文件编码:UTF-8
  • 使用Java 7
  • Windows 7

2 个答案:

答案 0 :(得分:5)

文本文件中的读取是否使用带BOM的UTF-8?它看起来像BOM标志:“” http://en.wikipedia.org/wiki/Byte_order_mark

你运行Windows吗? Notepad ++可以转换。如果使用linux或VI(M),你可以使用“:set nobomb”

答案 1 :(得分:1)

我认为您的输入文件是以UTF-8 with BOM编码的。

您可以在没有BOM的情况下保存输入文件,也可以用Java处理。

人们可能想要做的事情是使用具有适当编码的InputStreamReader。可悲的是,这是不可能的。问题是,Java assumes that UTF-8编码的文件没有BOM,所以你必须手动处理这种情况。

快速破解是检查文件的前三个字节是否为0xEF, 0xBB, 0xBF,如果是,则忽略它们。

有关更复杂的示例,请查看UnicodeBOMInputStreamin this answer