ホームページ  >  記事  >  Java  >  JavaでUTF-8ファイルを読み取るときにBOMを保持するにはどうすればよいですか?

JavaでUTF-8ファイルを読み取るときにBOMを保持するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-24 15:44:15634ブラウズ

How to Retain the BOM When Reading UTF-8 Files in Java?

BOM マーカーを使用した UTF-8 の読み取り: 予期しない BOM 出力について理解する

バイトオーダーを使用して UTF-8 でエンコードされたファイルを読み取る場合(BOM) をマークすると、出力文字列に BOM が含まれる可能性があります。これは、Unicode 識別子である BOM がファイルの先頭に特定のバイト シーケンスとして保存されているために発生します。

指定された Java コードでは、UTF-8 ファイルの読み取りを処理するために FileReader と BufferedReader が適切に利用されます。 。ただし、次の行で問題が発生します。

text = new String(tmp.getBytes(), "UTF-8");

この行は、UTF-8 文字セットを使用して tmp 文字列に格納されているバイトをデコードしようとします。ただし、String の getBytes() メソッドは、元のファイルの BOM マーカーを保持しません。その結果、デコード プロセスでは BOM が無視され、事実上失われます。

出力文字列に BOM マーカーを保持するには、コードをわずかに調整する必要があります。

byte[] bytes = tmp.getBytes("UTF-8");
if (isUTF8WithBOM(bytes)) {
    text = new String(bytes, 3, bytes.length - 3);
} else {
    text = new String(bytes, "UTF-8");
}

isUTF8WithBOM メソッドは、バイト配列が UTF-8 BOM シーケンス (0xEF、0xBB、0xBF) で始まるかどうかをチェックします。 true の場合、バイト配列を 3 番目のバイトからスライスすることによって BOM が削除されます。これにより、後続のデコード プロセスで出力文字列に BOM マーカーが確実に含まれるようになります。

以上がJavaでUTF-8ファイルを読み取るときにBOMを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。