【问题标题】:Why does the FileReader stream read 237, 187, 191 from a textfile?为什么 FileReader 流从文本文件中读取 237、187、191?
【发布时间】:2018-11-14 15:27:19
【问题描述】:

我有一个文本文件,里面只有一个字符“T”,我创建了一个读取流以将正在读取的内容输出到控制台,我得到了 239、187、191 和 84,我知道 84 代表'T',我知道 239、187、191 也代表其他字符,但我的文本文件中没有这些字符,这是怎么回事??

public class Test {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;

      try {
         in = new FileInputStream("input.txt");         
         int c;
         while ((c = in.read()) != -1) {
             System.out.println(c);

         }
      }finally {
         if (in != null) {
            in.close();
         }
      }
   }
}

【问题讨论】:

  • 是utf8字节序标记。一些编辑器将 BOM 保存在文件中(以便用作标题),这通常会导致混淆,因为它是可选的。

标签: java inputstream


【解决方案1】:

你确定不是239 187 191? (EF BB BF 十六进制)

您看到的是文件的byte order mark

字节顺序标记 (BOM) 是一个 Unicode 字符,U+FEFF BYTE ORDER MARK (BOM),它作为一个幻数出现在文本流的开头可以向读取文本的程序发出几个信号:

文本流的字节顺序或字节序;
文本流的编码是 Unicode 的事实,具有很高的可信度;
文本流被编码为哪种Unicode编码。

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 2012-09-04
    • 2021-04-09
    • 2022-08-14
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多