Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

いくつかの文字領域の呼び方について

特定の領域の文字を呼ぶ場面がありますが、正式に名称がないこともあります。

いわゆる「半角カナ」

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バイト文字」と呼ばれることが多い気もします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?