2

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

字符集 charset = StandardCharsets.UTF_8;
BufferedReader br = Files.newBufferedReader(file.toAbsolutePath(), charset);
字符串线;
while ((line = br.readLine()) != null) {
   如果(line.startsWith(“abc”)){
       // 做一点事
   }
}

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

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

4

1 回答 1

2

Windows 在 UTF-8 方面存在一些问题,因此它是UTF-8 BOM(字节顺序标记)的重度用户。

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

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

编辑:毫不奇怪,似乎是这样:见这里

于 2013-06-08T04:31:01.363 回答