1

ファイルをバイトの配列に読み込みました。次に、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はそれを返します。なぜこれが起こっているのですか、そしてこの問題を回避する方法はありますか?私が見る唯一の解決策は、返された文字列の最初の文字がバイト順マークであるかどうかを手動でチェックし、それを手動で削除することです。よりクリーンでより良い方法はありますか?

4

1 に答える 1

3

ドキュメントを参照しました... icu-project.org/apiref/icu4j/com/ibm/icu/text/…. 実際、対応するJava文字列を返すと言っていますが、BOMの削除については何も言っていません。ですから、そもそもそれがあれば、そこにあると思います。

それも回収されるのは私にとっては当然です。BOM を削除する場合は、ドキュメントで明示的に言及することを期待しています。

答えはここ unicode.org/faq/utf_bom.html#bom1 にあると思います-「一部の上位レベルのプロトコルでは、そのプロトコルで定義された Unicode データストリームで BOM の使用が必須 (または禁止) になる場合があります。」

それくらいだと思います。BOM が必須の場合は、再度追加する必要があります。BOMが禁止されている場合、それを除外することは、私が推測する簡単な部分と見なされます:)

于 2013-01-28T14:27:46.790 に答える