首页 > 解决方案 > 为什么 FileReader 流从文本文件中读取 237、187、191?

问题描述

我有一个文本文件,里面只有一个字符“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();
         }
      }
   }
}

标签: javainputstream

解决方案


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

您会看到文件的字节顺序标记

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

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


推荐阅读