UTF-8 ファイル読み取り時の BOM マーカーの処理
バイト オーダー マーク ( BOM)、予期しない出力を避けるために、BOM を正しく処理することが重要です。 BOM は、ファイルのバイト順序を示す特別なバイト シーケンスです。 UTF-8 では、BOM は 3 バイトのシーケンス EF BB BF です。
次のコードを考えてみましょう:
fr = new FileReader(file); br = new BufferedReader(fr); String tmp = null; while ((tmp = br.readLine()) != null) { String text; text = new String(tmp.getBytes(), "UTF-8"); content += text + System.getProperty("line.separator"); }
このコードでは、BOM は出力文字列に含まれます。 getBytes() メソッドは BOM を含む文字列の生のバイトを取得するためです。 BOM を正しく処理するには、次の手法を使用できます。
方法 1: BOM 文字セットを指定する
次のコマンドを使用して、文字セットを UTF-8 として指定できます。 Charset クラスを使用した BOM:
Charset charset = Charset.forName("UTF-8"); String text = new String(tmp.getBytes(charset), charset);
方法 2: 読み取りとドロップBOM
BOM が必要ない場合は、ファイルの残りの部分を処理する前に BOM を読み取って削除できます。
char[] bom = new char[3]; int bytesRead = br.read(bom, 0, bom.length); if (bytesRead == bom.length && new String(bom).equals("\uFEFF")) { // BOM exists, drop it }
これらの手法のいずれかを実装することで、 BOM が正しく処理されていること、および出力文字列に BOM マーカーが含まれていないこと。
以上がUTF-8 ファイル読み取りで BOM マーカーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。