【ばいとおーだーまーく】

バイトオーダーマーク とは?

最終更新:
💡 本文の前に付ける「文字の読み方の名札」

Unicodeテキストの先頭に置かれるU+FEFFという目印。UTF-16などではバイト順を示し、UTF-8では符号化方式を識別する手掛かりになります。

📌 このページのポイント
BOM:本文の前に付く目印UTF-8で「A」を保存する例EF BB BF41目印:3バイト本文:AUTF-8では、バイト順は変わらないUTF-16でBOMを使う場合FE FF上位バイトからFF FE下位バイトから付けるかは、保存形式と受け手の仕様で決める
UTF-16BE・UTF-16LEと明示する場合は、RFC 2781ではBOMを付けません。
ひよこ ひよこ
ペンギン先生、UTF-8の先頭に付く目印って何なの?
ペンギン先生 ペンギン先生
バイトオーダーマークのことだね。テキストの先頭に付ける読み方の目印だよ。UnicodeのU+FEFFを、その符号化方式に合わせて保存するんだ。
ひよこ ひよこ
どんなデータが増えるの?
ペンギン先生 ペンギン先生
UTF-8なら16進数でEF BB BFという3バイトだよ。たとえばAだけの本文は41の1バイトだけど、目印を付けるとEF BB BF 41の4バイトになるね。
ひよこ ひよこ
名前のとおり、文字の並び順を変えるの?
ペンギン先生 ペンギン先生
文字の順番ではなく、複数バイトの値を並べる順の話だよ。UTF-16ではFE FFなら上位バイトから、FF FEなら下位バイトからと分かるんだ。UTF-8にはその切り替えがなく、目印はUTF-8だと識別するために使われるよ。
ひよこ ひよこ
なら全部のテキストに付けたほうがいいの?
ペンギン先生 ペンギン先生
そうとは限らないよ。受け手の仕様で必須にも禁止にもなり得るんだ。先頭に特定の文字を期待する処理では邪魔になることもある。本文の途中のU+FEFFまで、目印だと決めつけて削除しないことも大切だね。
ひよこ ひよこ
UTF-16BEという名前でも、目印を付けるの?
ペンギン先生 ペンギン先生
RFC 2781では、UTF-16BEやUTF-16LEと明示したテキストにはBOMを付けない決まりだよ。名前でバイト順が分かるからね。「UTF-16でBOMを使って順序を示す場合」と区別し、保存する形式と受け手の仕様を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「バイトオーダーマーク」って出てきたら「テキストの先頭で読み方を示す目印」と思えばだいたいOK!
📖 おまけ:英語の意味
「Byte Order Mark」 = バイト順の目印
💬 byte orderはバイトの並び順、markは目印で、略してBOMとも呼ぶんだよ。製造業の部品表を意味するBOMとは別の用語だよ

参考資料

← 用語集にもどる