1. ホーム
  2. java

[解決済み] UTF-8 の読み込み - BOM マーカー

2023-07-11 13:33:39

質問

私は FileReader を通してファイルを読んでいます。ファイルは UTF-8 にデコードされています (BOM 付き) が、問題は、ファイルを読んで文字列を出力すると、悲しいことに BOM マーカーも出力されることです。なぜこのようなことが起こるのでしょうか?

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");
}

1行目以降の出力

?<style>

どのように解決するのですか?

Java では、UTF8 BOM が存在する場合、手動で消費する必要があります。この動作は Java バグ データベースで文書化されています。 ここで はこちら . JavaDocやXMLパーサなどの既存のツールを壊してしまうので、今のところ修正はありません。そのため Apache IO コモンズ が提供している BOMInputStream を使用して、この状況を処理します。

この解決策を見てみましょう。 BOM のある UTF8 ファイルを処理する