#?SuikaWiki/0.9 default-name="(reserved)" *Byte Order Mark バイト順印。 [1] [[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 (だっけ?) とかを別に追加することに なったとか。 (そして追加されたとか。) [[#comment]] **BOM は必須ですか? [3] '''質問''': >BOMって本来必須なものだと思っていたのですけど、そうでもないんですね [INS[( No.148-13)]] [2] はい。 >>1 にあるように、原則として必要ありません。 ただし、 [[UCS]] を使用する場面などによって、その場面で使用する規格などが BOM を使わなければならないと規定していること'''も'''あります。 その場合はもちろん必須になります。 **UTF-8 と UTF-8n [4] '''質問''': [[UTF-8]] の名前に "UTF-8" と "UTF-8n" があるようなのですが、どう違うのですか。 [5] まずはっきりさせておかないといけないこととして、 "UTF-8n" という名前はあまり知られていません。ですから、 "UTF-8" と "UTF-8n" にはっきり使い分けがあるのかというと、そうでもありません。 [6] "UTF-8n" という名前を提案しているのは、 [[UnicodeConsortium]] のそれなりに偉い人 (誰かは忘れた。) のようです。 しかも、その人の文章 (どこにあったか忘れた。 [[dW]] かなあ。) では、使い分けが当然であるかのように書いてあります。 しかし、 Unicode や ISO/IEC 10646 の規格票を見ても、そんなことは全然書いてありません。 つまり、両者を使い分ける提案はありますが、標準化団体や世間で受け入れられているものではありません。 また、受け入れられるけはいもありません。 [7] さて、回答ですが、使い分けを提案している人は、 "UTF-8n" を [[BOM]] なしの UTF-8 に、 "UTF-8" を BOM ありの UTF-8 に使おうと言っています。 [9] しかし実際には "UTF-8" という名前は BOM なしに対して呼ばれることが多いです。 (最近は BOM ありに対して言うことも多くなってきたようです。 (とはいえ、統計は無いので感覚的に、です。)) [8] >>9 のような状況でどうして >>7 のような定義を提案しているのかですが、おそらく BOM ありを普及させたい意図があるのでしょう。 [10] なお、 [[IETF]] [[charset]] 名 ([[MIME]] ([[電子メイル]]) や [[HTTP]] で使われる。) では "UTF-8" だけを定義していて、その内容は BOM はあっても無くてもいい、というものです。 [[#comment]] *メモ