バイトオーダーマークとはUnicodeの文字符号化方式を判別するための仕組みである。
概要
Unicodeではファイルとの先頭にU+FEFFを挿入することが認められている。これがあると、ファイルの先頭4バイトを読むだけで、そのファイルがどの文字符号化方式(文字符号化形式にビッグエンディアンとリトルエンディアンの区別を含めたもの)を使っているのか判定できるのだ。
- EF BB BF → BOMありUTF-8
- FE FF → ビッグエンディアンUTF-16
- FF FE → リトルエンディアンUTF-16
- 00 00 FE FF → ビッグエンディアンUTF-32
- FF FE 00 00 → リトルエンディアンUTF-32
UnicodeではU+EFBBは私用領域(E000-F8FF)にあるので、UTF-8のバイトオーダーマークが他のUTFと混同される心配はない。その他の混同を防ぐための割当制限についてはUTF-16, UTF-32の記事でバイトオーダーマークの項を参照。
U+FEFFって何の文字?
UnicodeでU+FEFFの符号位置にあるのはZERO WIDTH NO-BREAK SPACEであると定義されている。
本来、ZERO WIDTH NO-BREAK SPACEの記事に書くべきかもしれないが、ネタ記事になっている(ちなみに、あの記事のスペースは特にひねりのない全角スペースであり、非表示文字が埋め込まれたりはしていない模様)ので、こちらに記載する。
ZERO WIDTH NO-BREAK SPACEという名前で定義されているものの、原則としてファイルの先頭でバイトオーダーマークとしてのみ使用することとし、ゼロ幅文字としての使用は非推奨とされている(2002年3月のUnicode 3.2より)。
改行禁止ゼロ幅文字としては代わりにU+2060: WORD JOINERを使用することとされている。ただし、ファイルの先頭以外でZERO WIDTH NO-BREAK SPACEに遭遇したら、本来のゼロ幅文字として解釈することとなっている。
関連項目
- Unicode / UTF-8 / UTF-16 / UTF-32
- ビッグエンディアン / リトルエンディアン
- Unicode一覧(A000-FFFF) / Unicode一覧(0000-4DFF)
- ZERO WIDTH NO-BREAK SPACE
- インビジブルセパレーター
- 空白 / 半角スペース / スペース
- プログラミング関連用語の一覧
- 0
- 0pt