バイト順マーク

Unicode
文字符号化スキーム
UTF-7
UTF-8
CESU-8
UTF-16
UTF-32
UTF-EBCDIC
SCSU
Punycode (IDN/IDNA)
GB 18030
その他
UCS
マッピング
書字方向
BOM
漢字統合
UnicodeとHTML
Unicodeと電子メール
Unicodeフォント

バイト順マーク (バイトじゅんマーク、: byte order mark) 、バイトオーダーマークあるいはBOM(ボム)は、Unicode符号化形式で符号化したテキストの先頭につける数バイトのデータ。元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

概要

プログラムがテキストデータを読み込む時、その先頭の数バイトからそのデータがUnicodeで表現されていること、また符号化形式(エンコーディング)としてどれを使用しているかを判別できるようにしたものである。[1]

経緯

Unicodeが開発された当初は、アメリカではASCII、ヨーロッパなどではISO-8859、日本ではShift_JISEUC-JPといった他の文字コードが主流であり、使用されている符号化方式がUnicodeのものであることを明示する必要があった。また、Unicodeの符号化方式は複数あり、特にUTF-16やUTF-32にはそれぞれエンディアンが異なる2種類があるため、符号化方式同士を区別する必要があった。その方法として、先頭のデータにテキスト以外のデータを入れることが発案された。

使用するべきか否か

実際にBOMを使用すべきか、あるいは使用すべきでないかは、Unicodeを利用したより上位の仕様によって定められることがある。"XML Media Types" (RFC 3023) では、XMLをUTF-16で符号化する場合は先頭のBOMを必須とし、またXMLを解釈するソフトウェアでは、先頭にBOMがあった場合はxml宣言における<?xml encoding="..."?>の指定よりも優先してエンコーディングを判別すべきとしている[2]JSONの場合は、ネットワークで送信する場合はBOMを付けてはならないとしている[3]

UTF-8は文字コードとしてASCIIを前提としたプログラムでもおよそ支障なく動作するように設計されているが、BOMによって正常に処理できなくなる場合がある。Unicodeの規格において、UTF-8においてBOMは容認されるが、必須でも勧められるものでもないとされている[4]。また、データベースやメモリにロードするデータなど、内部的なデータ形式では、プログラムの性能や効率の観点から普通BOMは用いられない。

BOMによってUnicodeのテキストデータが他のUnicode符号化形式や、BOMのバイト表現(UTF-7を除く)に符号位置に該当する文字のない日本語の文字コードから正確に区別をすることができる一方で、0xFEに"þ"、0xFFに"ÿ"が割り当てられているISO/IEC 8859-1に対しては、この2文字が先頭にくる文章を誤ってUnicodeと判断してしまう問題がある。

各符号化形式(符号化スキーム)ごとのバイト順マーク

符号化形式(符号化スキーム) エンディアンの区別 バイト順マーク (BOM)
UTF-8 0xEF 0xBB 0xBF
UTF-16 BE 0xFE 0xFF
LE 0xFF 0xFE
UTF-16BE (付加は認められない)
UTF-16LE (付加は認められない)
UTF-32 BE 0x00 0x00 0xFE 0xFF
LE 0xFF 0xFE 0x00 0x00
UTF-32BE (付加は認められない)
UTF-32LE (付加は認められない)
UTF-7 0x2B 0x2F 0x76 ※ (※は次のバイトの値によって異なり、0x38、0x39、0x2B、0x2Fのいずれかがくる)

関連項目

ゼロ幅ノーブレークスペース - U+FEFF の文字

脚注

  1. ^ “Unicode FAQ”. 2012年7月25日閲覧。
  2. ^ RFC [https://datatracker.ietf.org/doc/html/rfc3023 3023 - XML Media Types]”. 2012年7月25日閲覧。
  3. ^ 8.1. Character Encoding - STD 90 - The JavaScript Object Notation (JSON) Data Interchange Format
  4. ^ the Unicode Consortium, Julie D. Allen (2007). The Unicode Standard -- Version 5.0. p. 36. ISBN 0-321-48091-0. http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf. "(from Chapter 2:General Structure) Use of a BOM is neither required nor recommended for UTF-8, but may be encountered in contexts where UTF-8 data is converted from other encoding forms that use a BOM or where the BOM is used as a UTF-8 signature" 
日本語用の
文字コード
JIS規格
符号化文字集合
文字符号化方式
文字一覧
JIS以外の公規格
メーカーの規格
符号化文字集合
文字符号化方式
日本語を含む
多言語文字集合
Unicode
ISO/IEC 10646
JIS X 0221
文字符号化方式
文字一覧
TRONコード
日本語以外用の
文字集合
初期の文字コード
ISO/IEC 8859
書誌用
  • ISO 5426
  • ISO 5426-2
  • ISO 5427
  • ISO 5428
  • ISO 6438
  • ISO 6861
  • ISO 6862
  • ISO 9036
  • ISO 10585
  • ISO 10586
  • ISO 10754
  • ISO 11822
  • ANSEL
  • MARC-8
国家標準
EUC
ISO/IEC 2022
  • ISO/IEC 2022 CN
  • ISO/IEC 2022 KR
  • CCCII
MacOS
コードページ
  • Macintosh Standard Roman Character Set
  • アラビア語
  • CentralEurRoman
  • EUC-CN
  • Big5
  • クロアチア語
  • キリル
  • デーヴァナーガリー
  • Dingbats
  • ペルシャ語
  • ギリシア語
  • グジャラート語
  • グルムキー
  • ヘブライ語
  • アイスランド語
  • EUC-KR
  • ルーマニア語
  • MacSymbol
  • TIS-620
  • トルコ語
  • ウクライナ語
DOS
コードページ
  • 437
  • 720
  • 737
  • 775
  • 850
  • 852
  • 855
  • 857
  • 858
  • 860
  • 861
  • 862
  • 863
  • 864
  • 865
  • 866
  • 869
  • KOI8
  • Kamenicky
  • Mazovia
  • MIK
  • Iran System
Windows
コードページ
EBCDIC
コードページ
  • 37
  • 293(英語版)
  • 300(英語版)
  • 310(英語版)
  • 351(英語版)
  • 353(英語版)
  • 355(英語版)
  • 357(英語版)
  • 358(英語版)
  • 359(英語版)
  • 360(英語版)
  • 819
  • 930(英語版)
  • 933(英語版)
  • 939(英語版)
  • 1364(英語版)
  • 1390(英語版)
  • 1399(英語版)
  • 8859(英語版)
その他標準
記号用
プラットフォーム
固有
  • ATASCII
  • CDC display code
  • DEC Radix-50
  • Fieldata
  • GSM 03.38
  • HP roman8
  • PETSCII
  • TI calculator character sets
  • ZX Spectrum character set
ソフトウェア
区分け
概念
関連トピック
カテゴリ カテゴリ