特定の領域の文字を呼ぶ場面がありますが、正式に名称がないこともあります。
いわゆる「半角カナ」
Unicodeにも正式に入ってしまったこともあって、互換性の低い文字としての問題はほぼ収束した感のある「半角カナ」ですが、本来「半角」という文字のサイズと文字コードは結びつくものではありませんし、「1バイトカナ」と言っても1バイトになるのはJIS X 0201とシフトJISだけで、EUCでは2バイト、UTF-8では3バイトを消費するので、これまた適切な表現ではありません。
厳密に言うなら、
- JIS X 0201の仮名文字
- シフトJISの1バイトカナ
なのですが、Unicodeに採録された名称が「Halfwidth Katakana」なので、「半角カナ」という名前もほぼ公式のものになった…というところです。
BMP外の文字
Unicodeの規格上は、17の「面」(16ビットの文字空間)がありますが、現状ではそのうち7つしか定義されていません。
- 第0面…基本多言語面(BMP)、元はここだけで済ませようと計画していた(のが破綻した)面。
- 第1面…追加多言語面(SMP)、絵文字や古代文字など、BMPに入らなかった用字系を入れる面。
- 第2面…追加漢字面(SIP)、漢字専用の面。
- 第3面…第三漢字面(TIP)、もとは甲骨文字や古代漢字を入れる計画だったけど、追加漢字面が一杯になってきたので現代漢字が先に入る予定。
- (第4面~第13面は未定義)
- 第14面…追加特殊用途面(SSP)、異体字セレクタなどの制御コード専用の面
- 第15面・第16面…私用面、Unicode規格では何も定義しない、いわゆる「外字」専用の領域
このうち、「BMP」と「それ以外」には大きな格差があります。
- UTF-16の場合、BMPはコードポイント1つで済むのに対して、それ以外は「サロゲートペア」としてコードポイント2つを使います。
- 仕様上UTF-16をつかうことになっているJavaScriptの場合、ハンドリングを間違えればサロゲートペアの途中で文字をぶった切ってしまうことが起きます。
- UTF-8では、BMP内の文字は3バイト以内で表現されるのに対し、それ以外の文字は4バイトとなる。
- MySQLの
utf8
は3バイト以内の文字しか格納できず、全部入れようとすればutf8mb4
という別の設定に切り替えが必要
いちおう、「BMP外」の文字を入れる面には「追加面」という総称がついているのですが、あまり使われているのを見なくて、「BMP外の文字」とか(UTF-8/UTF-16を前提に)「4バイト文字」と呼ばれることが多い気もします。