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と呼ぶことは現実には不正確である。

用語の所属
Unicode
関連する符号系
UTF-16
UTF-32
UTF-8
関連する用語
リトルエンディアン
ビッグエンディアン
エンディアンネス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club