为什么windows中文件第一行的第一个字符为0?

时间:2013-06-08 04:07:18

标签: java windows utf-8 nio

所以我正在用Java阅读一个纯文本文件,我想确定哪些行以“abc”开头。我做了以下事情:

Charset charset = StandardCharsets.UTF_8;
BufferedReader br = Files.newBufferedReader(file.toAbsolutePath(), charset);
String line;
while ((line = br.readLine()) != null) {
   if (line.startsWith("abc")) {
       // Do something
   }
}

但是如果文件的第一行是“abcd”,它将不匹配。通过调试我发现第一个字符是0(不可打印的字符),因此它不匹配。为什么会这样?我怎样才能有力地识别哪些行以“abc”开头?

编辑:也许我应该指出我正在使用记事本创建文件

1 个答案:

答案 0 :(得分:2)

Windows在UTF-8方面存在一些问题,因此它是UTF-8 BOM (Byte Order Mark)的重度用户。

如果我的猜测是正确的,那么前三个字节将是(十六进制):0xef,0xbb,0xbf。

鉴于此,例如,Excel创建带有BOM前缀的UTF-8 CSV文件,如果Notepad也这样做,我也不会感到惊讶......

编辑:毫不奇怪,似乎是这种情况:见here