为什么FileReader流从文本文件中读取237、187、191?

时间:2018-11-14 15:27:20

标签: java inputstream

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

1 个答案:

答案 0 :(得分:3)

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

您看到文件的byte order mark

  

字节顺序标记(BOM)是Unicode字符U + FEFF BYTE ORDER MARK(BOM),它在文本流开始时显示为魔术数字,可以向读取文本的程序发出信号: / p>      

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