*Byte Order Mark バイト順印。 [[ISO/IEC10646]] にはこの言葉は出てきません ([[Unicode]] には出てくる)。 1:2000 附属書 H (参考) The use of “signatures” to identify UCS に説明があります。 >This annex describes a convention for the >identification of features of the UCS, by the use of >"signatures" within data streams of coded >characters. The convention makes use of the >character ZERO WIDTH NO-BREAK SPACE, and is >applied by a certain class of applications. なんだそーです。使いたけりゃ使えば? 的で結構さめてます。 -UCS-2 signature: FEFF -UCS-4 signature: 0000 FEFF -UTF-8 signature: EF BB BF -UTF-16 signature: FEFF ってことですが、別に UCS-2/4, UTF-8/16 を区別できるのが 嬉しいのじゃなくて、その名の通りバイト順を区別できるのが嬉しいんです。 -UCS-2/UTF-16BE: FEFF -UCS-2/UTF-16LE: FFFE -UCS-4/UTF-32BE: 0000 FEFF -UCS-4/UTF-32LE: FFFE 0000 このように、[[エンディアン]]が識別できるんです。素晴らしいでしょ? だから [[UTF-8]] ではこんなの要らんのですが、一貫性かなんかのために、 つけようというのが当世風。対応してない応用からすると頭にゴミです。 おまけに、 UTF-8 の最大の特徴であった [[ASCII]] との互換性を ぶっ飛ばしてしまいます。 ZERO WIDTH NO-BREAK SPACE (ZWNBSP) が U+FEFF に置いてあって、 U+FFFE が not a character になってるのは偶然じゃありません。 BOM に使うためにわざわざこう配置したんです。で、 BOM ありなし問題云々で U+FEFF を ZWNBSP 本来(?)の役目に使うことが 出来ない状況になってしまった(ほんとか?)もんですから、 ZERO WIDTH NON-JOINTER (だっけ?) とかを別に追加することに なったとか。 (そして追加されたとか。)