所以我正在用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”开头?
编辑:也许我应该指出我正在使用记事本创建文件
答案 0 :(得分:2)
Windows在UTF-8方面存在一些问题,因此它是UTF-8 BOM (Byte Order Mark)的重度用户。
如果我的猜测是正确的,那么前三个字节将是(十六进制):0xef,0xbb,0xbf。
鉴于此,例如,Excel创建带有BOM前缀的UTF-8 CSV文件,如果Notepad也这样做,我也不会感到惊讶......
编辑:毫不奇怪,似乎是这种情况:见here。