ファイルをバイトの配列に読み込みました。次に、ICU4Jを使用してファイルのエンコーディングを検出し(エンコーディングが何であるかはわかりません。これらのファイルは複数の異なるエンコーディングを持つ可能性があります)、Unicode文字列を返します。そのようです:
byte[] fileContent = // read file into byte array
CharsetDetector cd = new CharsetDetector();
cd.setText(fileContent);
CharsetMatch cm = cd.detect();
String result = cm.getString();
私のファイルがUTF-16LEを使用してエンコードされている場合、「結果」の最初の文字はバイト順マークです。私はこれには興味がありません。これはエンコーディングスキームに固有であり、実際にはファイルコンテンツの一部ではないため、なくなると思います。
それでもICU4Jはそれを返します。なぜこれが起こっているのですか、そしてこの問題を回避する方法はありますか?私が見る唯一の解決策は、返された文字列の最初の文字がバイト順マークであるかどうかを手動でチェックし、それを手動で削除することです。よりクリーンでより良い方法はありますか?