4

エンコーディングの適切なバイト オーダー マークに対応するバイトを返す Java のユーティリティ メソッドまたは定数を探していますが、見つからないようです。ありますか?私は本当に次のようなことをしたいと思います:

byte[] bom = Charset.forName( CharEncoding.UTF8 ).getByteOrderMark();

CharEncodingApache Commons の由来はどこにありますか。

4

5 に答える 5

4

Java は UTF-8 のバイト オーダー マークを認識しません。バグ4508058および6378911を参照してください。

要点は、サポートが追加され、下位互換性が失われ、ロールバックされたということです。UTF-8 で BOM 認識を自分で行う必要があります。

于 2009-04-21T20:03:23.170 に答える
3

Apache Commons IO には、探しているものが含まれています。 を参照してくださいorg.apache.commons.io.ByteOrderMark

于 2012-09-13T15:41:57.147 に答える
2

次のように BOM を生成できます。

byte[] utf8_bom = "\uFEFF".getBytes("UTF-8");
byte[] utf16le_bom = "\uFEFF".getBytes("UnicodeLittleUnmarked");

この方法を使用して他のエンコーディング用の BOM を作成する場合は、BOM を自動的に挿入しないバージョンのエンコーディングを使用してください。そうしないと、BOM が繰り返されます。この手法は Unicode エンコーディングにのみ適用され、他のもの (Windows-1252 など) にとって意味のある結果は得られません。

于 2009-04-03T09:42:06.277 に答える
1

私が見る限り、JDKには何もありませんし、Apacheプロジェクトもありません。

Eclipse EMF には Enum がありますが、サポートを提供します。

org.eclipse.emf.ecore.resource.ContentHandler.ByteOrderMark

それがあなたの助けになるかどうかわかりませんか?

各エンコーディング タイプのさまざまな BOM に関する詳細情報がここにあります。このために単純なヘルパー クラスまたは列挙型を作成できます...

http://mindprod.com/jgloss/bom.html

それが役立つことを願っています。正直なところ、これが Commons I/O にないことに驚いています。

于 2009-04-03T00:03:34.233 に答える
1

多くのエンコーディングでは、バイト オーダー マークが使用されていないことに注意してください。たとえば、UTF-8 の空の文字列は単なる空の byte[] です。UTF-8 用に指定された BOM がありますが、Java ではめったに使用されず、常にサポートされているわけではありません。

于 2009-04-03T06:23:09.280 に答える