5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字Advent Calendar 2017

Day 19

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

Last updated at Posted at 2017-12-18

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

いわゆる「半角カナ」

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

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?