所以我正在读取 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”开头?
编辑:也许我应该指出我正在使用记事本创建文件
最佳答案
Windows 在 UTF-8 方面存在一些问题,因此它是 UTF-8 BOM (Byte Order Mark) 的重度用户。 .
如果我的猜测是正确的,那么前三个字节将是(十六进制):0xef、0xbb、0xbf。
例如,考虑到 Excel 创建带有 BOM 前缀的 UTF-8 CSV 文件,如果记事本也这样做,我一点也不会感到惊讶...
编辑:毫不奇怪,情况似乎是这样:参见 here .
关于java - 为什么windows下文件第一行的第一个字符是0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995935/