2

Javaでプレーンテキストファイルを読んでいて、「abc」で始まる行を特定したいと思います。私は次のことをしました:

文字セット charset = StandardCharsets.UTF_8;
BufferedReader br = Files.newBufferedReader(file.toAbsolutePath(), charset);
ストリングライン;
while ((line = br.readLine()) != null) {
   if (line.startsWith("abc")) {
       //何かをする
   }
}

ただし、ファイルの最初の行が「abcd」の場合は一致しません。デバッグによって、最初の文字が 0 (印刷できない文字) であることがわかりました。このため、一致しません。どうしてこんなことに?「abc」で始まる行を確実に特定するにはどうすればよいですか?

編集:おそらく、メモ帳を使用してファイルを作成していることを指摘する必要があります

4

1 に答える 1

2

Windows には UTF-8 に関するいくつかの問題があり、そのため、 UTF-8 BOM (Byte Order Mark)のヘビー ユーザーです。

私の推測が正しければ、最初の 3 バイトは (16 進数で) 0xef、0xbb、0xbf になります。

たとえば、Excel が BOM プレフィックス付きの UTF-8 CSV ファイルを作成することを考えると、メモ帳も同じように作成されたとしてもまったく驚かないでしょう...

編集: 当然のことながら、これが事実のようです:こちらを参照してください。

于 2013-06-08T04:31:01.363 に答える