【问题标题】:Symbols '  ' is showing when reading from text file从文本文件读取时显示符号 ''
【发布时间】:2013-02-05 14:54:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请告知:输入文件的编码,你这样做的操作系统环境,你平台上java阅读器的默认编码,数据如何以及在哪里显示? (即在 GUI、终端窗口等)
  • Google for BOM(字节顺序标记)

标签: java byte-order-mark


【解决方案1】:

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

你在运行 Windows 吗? Notepad++ 应该能够转换。如果使用 linux 或 VI(M) 你可以使用 ":set nobomb"

【讨论】:

    【解决方案2】:

    我想你的输入文件是用UTF-8 with BOM编码的。

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

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

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

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

    【讨论】:

    • 以它的编码读取文件不是更好吗?你如何保证文件的其余部分是 ASCII?
    • @Ingo 我从不认为它是 ASCII,FileReader 使用系统的默认编码。我只是想给 OP 一个快速的技巧来处理它,但我已经编辑了我的答案以详细说明。更好的? :-)
    猜你喜欢
    • 2013-06-28
    • 2023-03-03
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多