提案されたスキームは、現在のサロゲート ペア スキームよりも効率が低く、これが 1 つの問題です。
Currently, only 0xD800-0xDFFF (2048 code units) are "out of bounds" as normal characters, leaving 63488 code units mapping to single characters. Under your proposal, 0x8000-0xFFFF (32768) code units are reserved for multi-code-unit code points, leaving only the other 32768 code units for single-code-unit code points.
I don't know how many code points are currently specified in the basic multilingual plane, but I wouldn't be surprised if it were more than 32768, and of course it can grow. As soon as it's more than 32768, there would be more characters which require two code units to be represented under your proposal than in UTF-16 as it stands.
これで、UCS に予約済みの範囲を含める必要がないことに同意します (そして、いくつかの点で意味の醜い組み合わせです)。かなり効率的なソリューション。
これにはマイナス面がほとんどありません。UCS には十分なスペースがあるため、この小さなブロックを確保することは、将来の拡張の余地が大幅に少なくなることを意味するわけではありません。
仮定
このビットは情報に基づいた推測です。どのバージョンの Unicode でどの文字が使用されているかを調べるために調査を行うこともできますが、少なくとももっともらしい説明だと思います。
この特定のブロックが使用されている本当の理由は、おそらく歴史的なものです。長い間、Unicode は実際にはすべて 16 ビットでした...そして、文字はすでに上限の範囲 (スキームが立ち入り禁止と見なす部分) に割り当てられていました。以前に割り当てられていなかった 2048 個の値のブロックを取得することにより、以前の有効な UCS-2 シーケンスはすべて同じ意味を持つ有効な UTF-16 シーケンスとして保持され、UCS 範囲は BMP を超えて拡張されました。範囲が 0xF800 ~ 0xFFFF だった場合、いくつかの側面がより簡単になる可能性がありますが、それでは遅すぎました。