マルチバイト文字を扱うときの問題のひとつに,エンディアンの違いがある. 送信者と受信者でエンディアンが一致しているかどうかを調べる方法として, ファイルの先頭にU+FEFF ZERO WIDTH NO-BREAK SPACEを書き込んでおく方法がある. ZERO WIDTH NO-BREAK SPACEは,幅がゼロで改行されない空白文字なので,このコードを挿入しても見た目上は変化がなく, かつ,送信者と受信者でエンディアンが違っていた場合,受信者は0xFFFEというコードを読み込むことになり, このコードがUnicodeでは文字ではないため[参考],エンディアンが一致していないことがすぐわかるという仕掛けになっている. この使い方のU+FEFFをバイトオーダーマーク(Byte Order Mark;BOM)と呼ぶ.
コード | 符号化方式 |
---|---|
00 00 FE FF | UTF-32LE(ビッグエンディアンのUTF-32) |
FF FE 00 00 | UTF-32BE(リトルエンディアンのUTF-32) |
FE FF | UTF-16BE(ビッグエンディアンのUTF-16) |
FF FE | UTF-16LE(リトルエンディアンのUTF-16) |
EF BB BF | UTF-8 |
BOMの具体的な使い方(どんなときに使うべきで どんなときに使わないべきか)については次の資料が詳しい.
簡単に内容を書いておくと…
#!
”)
がきていることを想定しているファイルの場合はBOMをつけるべきではない.