在Java中读取奇怪的unicode字符?

ipk*_*iss 4 java unicode file-io

我有以下文本文件:

在此输入图像描述

该文件使用utf-8编码保存.

我使用以下代码来读取文件的内容:

FileReader fr = new FileReader("f.txt");
BufferedReader br = new BufferedReader(fr);
String s1 = br.readLine();
String s2 = br.readLine();
System.out.println("s1 = " + s1.length());
System.out.println("s2 = " + s2.length());
Run Code Online (Sandbox Code Playgroud)

输出:

s1 = 5

s2 = 4
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用s1.charAt(0);获取s1的第一个字符,它是''(空白)字符.这就是为什么s1的长度为5.即使我试图使用s1.trim();它的长度仍为5.我不知道为什么会发生这种情况?如果文件是使用ASCII编码保存的,它可以正常工作.

Mic*_*rdt 7

记事本显然用一个字节顺序标记保存了文件,一开始就是一个非打印字符,只是标记为UTF-8,但不需要(实际上不推荐)使用.你可以忽略或删除它; 其他文本编辑器通常会让您选择使用带或不带BOM的UTF-8.