BOM
読み:ビーオウエム
外語:BOM: Byte Order Mark

 Unicodeの符号化のうち、UTF-16UTF-32などで採用されているエンディアンネス識別符号。Unicode 3.0ではChapter13に書かれている。
目次

概要
 Unicodeは「16ビット固定長」から始まった。同時期にISO/IEC 10646は「31ビット固定長」から始まった。
 しかし多くのコンピューターは8ビット程度をバイトという単位として扱い、更にエンディアンネスも様々なものが混在した。符号のエンディアンネスを識別可能にするためには、二つの解決法がある。
  1. 符号のエンディアンネスを固定化する
  2. 符号のエンディアンネスは自由にして、代わりに目印を付ける
 前者を採用するのが最もスマートであるが、初期のUnicodeの符号化では後者が採用された。符号のエンディアンネスを先頭の文字で区別することから、これをバイトオーダーマーク(バイト順序マーク、BOM)という。

特徴

ZWNBSP
 UnicodeおよびISO/IEC 10646では、U+FEFFとして「ZERO WIDTH NO-BREAK SPACE」(幅の無い改行しない空白、略してZWNBSP)という記号を定義している。これとバイト順が逆になるU+FFFEは同様に非文字とされ、未来永劫使用されない符号位置と定義された。
 ZWNBSPは、見えないし改行もされないし文字幅もゼロの、存在自体を無視できる文字である。
 かくして、ファイルまたはストリームの先頭のU+FEFFの順序を確認することで、符号化の種類やエンディアンネスを判別することができる。

使用は任意
 BOMを付けるかどうかは任意であり、付けない場合もある。無い場合、エンディアンネスについては処理系依存ということになる。
 但し、現在使われている「UTF-16」という符号化方法では明確に規定があり、BOMが無い場合はビッグエンディアン(UTF-16BE相当)として扱うことになっている。
 なお、Microsoft Windowsで「Unicode」と俗称されている符号はUTF-16であり、通常はBOM付きリトルエンディアンで符号を入出力している。

仕様
 各符号ごとに、次のような順序になる。

UTF-8
 UTF-8は、バイト順が明確に固定されている。従って、バイト順序マーク(BOM)といったものは必要とされない。
 UTF-8では、U+FEFFは「0xEF 0xBB 0xBF」と3オクテットで符号化され、UTF-8の文書ファイル等では、それがUTF-8であることを示すために先頭に附されることが多い。但しバイト順をこれで決めているわけではないので、これをBOMと呼ぶことは現実には不正確である。

再検索