BOM (Byte Order Mark)

バイト・オーダー・マーク

 UnicodeのUTF-16などの16bit単位の文字エンコーディングスキームでは、8bit単位でデータを配列する際のエンディアンとして、ビッグエンディアンとリトルエンディアンの両方を許している。そのため、どちらのエンディアンで記述されたデータかを確実に判定するための特別なマークとなる符号として、BOM(Byte Order Mark)が用意されている。

 またBOMは、あるテキストがUnicodeで記述されているかどうかを自動判定する手段として使用される場合もある。この目的に使用される場合は、エンディアンが存在するUTF-16だけでなく、エンディアンが存在しないUTF-8のテキストに付加される場合もある。

 BOMは、必ずテキストの先頭に付加される。テキストの中間に置かれることはない。BOMの値は、U+ffefと定められている。エンディアンを誤って読み込んだ場合は、この値は、0xfffeという16進値になるが、この値は常に定義されない値と決められている。つまり、最初の1文字を読み込んで、0xfffeという値を得た場合は、エンディアンを逆転して読み直せば良いことが分かる。

 BOMを付けることは義務ではなく、必要に応じて判断することになる。インターネットの世界では、RFC 2781において、UTF-16のテキストにBOMを付けるべき場合と、付けるべきではない場合について条件を定めている。

 Unicodeと同等であると言われるISO/IEC 10646ではBOMに相当するコードは、“ZERO WIDTH NON-BREAKING SPACE”と呼ばれ、BOMと呼ばれることはない。このコードが意味するところは、幅がゼロであり単語を分割しない空白文字ということであり、つまり何も機能を持たない文字として扱われる。BOMと異なるこの文字は、テキストのどの位置に出現してもよい。テキストの先頭に出現する“ZERO WIDTH NON-BREAKING SPACE”は、BOMと同じ機能を持つ文字として扱うことができる。

 以下はBOMが付加されたテキストファイルの16進ダンプリストである。

BOM付きUTF-16リトルエンディアン
ff fe cf 30 ed 30 fc 30

BOM付きUTF-16ビッグエンディアン
fe ff 30 cf 30 ed 30 fc

BOM付きUTF-8
ef bb bf e3 83 8f e3 83 ad e3 83 bc

 

関連記事

関連用語

Endian
Unicode
UTF-16
UTF-8
UCS

リンク

XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

アイティメディアの提供サービス

キャリアアップ